{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "大家好，这篇是有关Learning from data第三章习题的详解，这一章主要介绍了线性回归，Logistic回归以及特征转换。\n",
    "\n",
    "我的github地址：  \n",
    "https://github.com/Doraemonzzz\n",
    "\n",
    "个人主页：  \n",
    "http://doraemonzzz.com/\n",
    "\n",
    "\n",
    "参考资料:  \n",
    "https://blog.csdn.net/a1015553840/article/details/51085129  \n",
    "http://www.vynguyen.net/category/study/machine-learning/page/6/  \n",
    "http://book.caltech.edu/bookforum/index.php  \n",
    "http://beader.me/mlnotebook/"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Chapter 3 The Linear Model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Part 1:Exercise"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 3.1 (Page 79)\n",
    "\n",
    "Will PLA ever stop updating if the data is not linearly separable?   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果数据不是线性可分的，那么PLA不会终止，因为PLA每次挑选一个错分的数据做更新。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 3.2 (Page 80)\n",
    "\n",
    "Take $d = 2$ and create a data set $\\mathcal{D}$ of size $N = 100$ that is not linearly separable. You can do so by first choosing a random line in the plane as your target function and the inputs $x_n$ of the data set as random points in the plane. Then, evaluate the target function on each $x_n$ to get the corresponding output $y_n$. Finally, flip the labels of $\\frac N {10}$ randomly selected $y_n$'s and the data set will likely become non separable.\n",
    "\n",
    "Now, try the pocket algorithm on your data set using $T= 1 , 000$ iterations. Repeat the experiment 20 times. Then, plot the average $E_{in}(w(t))$ and the average $E_{in} (\\hat w) $(which is also a function of t) on the same figure and see how they behave when $t$ increases. Similarly, use a test set of size 1, 000 and plot a figure to show how $E_{out} (w(t))$ and $E_{out} (\\hat w) $ behave.    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先构造100个线性不可分的点，题目给出的方法是先随意取一条直线（这里我们选择的直线是$y=x$），然后根据这条直线给出$N=100$个线性可分的点，再随机挑选其中$\\frac N {10}=10$个数据，翻转他们的$y_n$，然后使用pocket PLA进行1000次迭代，画出$E_{in}(w(t))$，以及平均值$E_{in} (\\hat w) $随迭代次数的变化，在这个过程中同样计算1000个测试数据的$E_{out} (w(t))$ 和平均值 $E_{out} (\\hat w) $ 并作图，这里的测试数据和之前的数据符合的规则应该一致，都是同样有10%的数据经过翻转。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "#产生n组数据，10%为噪声，这里直线选择为y=x\n",
    "def generatedata(n):\n",
    "    #记录全部数据\n",
    "    Data=[]\n",
    "    for i in range(n):\n",
    "        data=np.array(1)\n",
    "        data=np.append(data,np.random.uniform(-2,2,2))\n",
    "        if data[2]>data[1]:\n",
    "            data=np.append(data,1)\n",
    "        else:\n",
    "            data=np.append(data,-1)\n",
    "        #我们将前n/10个数据修改为噪声，最后再打乱数据\n",
    "        if i<n/10:\n",
    "            data[-1]*=-1\n",
    "        Data.append(data)\n",
    "    np.random.shuffle(Data)\n",
    "    return Data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "产生100个以及1000的点，然后分别作图看看。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2ee2695ddd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nNxsAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2ee265aeb00>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pylab as plt\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus']=False #用来正常显示负号\n",
    "\n",
    "#生成训练数据\n",
    "train=generatedata(100)\n",
    "#后面两步是为了作图\n",
    "#标签为+1的点\n",
    "trainpx=[i[1] for i in train if i[-1]>0]\n",
    "trainpy=[i[2] for i in train if i[-1]>0]\n",
    "#标签为-1的点\n",
    "trainnx=[i[1] for i in train if i[-1]<0]\n",
    "trainny=[i[2] for i in train if i[-1]<0]\n",
    "\n",
    "#生成测试数据\n",
    "test=generatedata(1000)\n",
    "#标签为+1的点\n",
    "testpx=[i[1] for i in test if i[-1]>0]\n",
    "testpy=[i[2] for i in test if i[-1]>0]\n",
    "#标签为-1的点\n",
    "testnx=[i[1] for i in test if i[-1]<0]\n",
    "testny=[i[2] for i in test if i[-1]<0]\n",
    "\n",
    "x=[-2,2]\n",
    "y=[-2,2]\n",
    "\n",
    "#训练数据\n",
    "plt.scatter(trainpx,trainpy,s=1)\n",
    "plt.scatter(trainnx,trainny,s=1)\n",
    "plt.title('训练数据')\n",
    "plt.plot(x,y,label='y=x')\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "#测试数据\n",
    "plt.scatter(testpx,testpy,s=1)\n",
    "plt.scatter(testnx,testny,s=1)\n",
    "plt.title('测试数据')\n",
    "plt.plot(x,y,label='y=x')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接着定义Pocket PLA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#定义sign函数\n",
    "def sign(x):\n",
    "    if x>0:\n",
    "        return 1\n",
    "    else:\n",
    "        return -1\n",
    "\n",
    "#定义计算错误个数的函数,n为数据维度\n",
    "def CountError(x,w,n):\n",
    "    count=0\n",
    "    for i in x:\n",
    "        if sign(i[:n].dot(w))*i[-1]<0:\n",
    "            count+=1\n",
    "    return count\n",
    "\n",
    "#定义PocketPLA,k为步长,max为最大更新次数\n",
    "def PocketPLA(train,test,k,maxnum):\n",
    "    #n为数据维度,m为数据数量\n",
    "    m=len(train)\n",
    "    n=len(train[0])-1\n",
    "    #记录过程中的全部w\n",
    "    W=[]\n",
    "    #Ein\n",
    "    Ein=np.array([])\n",
    "    #Eout\n",
    "    Eout=np.array([])\n",
    "    #初始化向量\n",
    "    w=np.zeros(n)\n",
    "    #错误率最小的向量\n",
    "    w0=np.zeros(n)\n",
    "    #记录次数\n",
    "    t=0\n",
    "    error=CountError(train,w,n)\n",
    "    if error==0:\n",
    "        pass\n",
    "    else:\n",
    "        #记录取哪个元素\n",
    "        j=0\n",
    "        while (t<maxnum or error==0):\n",
    "            #记录是否更新过\n",
    "            flag=0\n",
    "            i=train[j]\n",
    "            #print(error)\n",
    "            if sign(i[:n].dot(w))*i[-1]<0:\n",
    "                w+=k*i[-1]*i[:n]\n",
    "                t+=1\n",
    "                flag=1\n",
    "            error1=CountError(train,w,n)\n",
    "            if error>error1:\n",
    "                w0=w[:]\n",
    "                error=error1\n",
    "            j+=1\n",
    "            if(j>=m):\n",
    "                j=j%m\n",
    "            #更新才记录数据\n",
    "            if flag==1:\n",
    "                Ein=np.append(Ein,error/m)\n",
    "                Eout=np.append(Eout,CountError(test,w0,n)/len(test))\n",
    "                W.append(w0)\n",
    "    return Ein,Eout,W"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们看下训练结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2ee269aca20>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAETCAYAAAA23nEoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzsfXmcFMXd97dmZm+W+xIQAfEEBBXv\nC1Gj8Y4nRn00Meby9TV5kzwxEaMxXjFqTGLyJEbik0SNR+IRL8ALEQUVIiinICIscizHsvfuzHS9\nf8z0dHV1VXV1T8/swNT384Gdma7j191V9TvrV4RSCgMDAwMDg1hPE2BgYGBgUBowDMHAwMDAAIBh\nCAYGBgYGWRiGYGBgYGAAwDAEAwMDA4MsDEMwMDAwMABgGIKBgRSEkKsJIR2EkM3Mv717mi4Dg0LB\nMAQDAzWep5QOZf5tCNoAIWQSIeT8QhBnYBAlDEMwMCg8JgEwDMGg5GEYgoFBABBCYoSQ+wghGwkh\nSwghR2R//19CyNVMOZr9uw7AbwBcmjU5/awn6DYw0EGipwkwMChxnEcI2Zz9vBrAX5GR+PcFcCyA\npwkhB8gqU0pHZRnFFErp1QWm1cAgLxiGYGCgxvOU0mn2F0LIvwD8mVLaCeANQsguABPYCoQQUmQa\nDQwigTEZGRgEB+U+8xkihxeRFgODyGAYgoFBMLwC4BpCSBUh5CQAfQEsBdAMwA5JvZ6rsw3APgBA\nCBlYLEINDILCMAQDAzXOY/chANgJ4GMAawH8FsDFlNIuAH8G8FVCyEwA67g2ZgHYRQjZAuC14pFu\nYBAMxJyHYGBgYGAAGA3BwMDAwCALwxAMDAwMDAAYhmBgYGBgkIVhCAYGBgYGAAxDMDAwMDDIYrfa\nqTxw4EA6atSonibDwMDAYLfCokWLtlFKB/mV260YwqhRo7Bw4cKeJsPAwMBgtwIh5HOdcsZkZGBg\nYGAAwDAEAwMDA4MsDEMwMDAwMACwm/kQDAwMDAAgmUyioaEBnZ2dPU1KSaG6uhojRoxARUVFqPqG\nIRgYGOx2aGhoQH19PUaNGgVz/EQGlFJs374dDQ0NGD16dKg2jMnIwMBgt0NnZycGDBhgmAEDQggG\nDBiQl9ZUNgyhtSvV0yQYGBhECMMMvMj3mZQFQ1i8oQnjb5mFmUs3+xc2MDAw8MGtt96Kgw46CFOm\nTMGUKVOwePFi7bpz5szBunXrCkdcHigLhvBxQxMAYN6axh6mxMDAYE/BTTfdhDlz5mDOnDmYNGmS\ndr1SZghl4VS21SjLnAVkYLDH4ecvLMPyL5ojbfPgYb1xyznjtMvv2LEDV111FZqamnD44YfjgQce\nwNVXX41bb70Vo0aNwq233oopU6bgr3/9K958800899xzGDduHB577LFI6c4XZcIQMn/N6XAGBgZR\n4Y477sDDDz8MADj00EMxbdo0XH755fja176GmTNnCus88sgjOeYwZcqUIlKrh7JgCLEsRzD8wMBg\nz0MQST5K3HTTTbjiiisAAGeeeSauu+46AMBRRx2FFStWuMp2dHQUnb4wKAsfgu13twxHMDAwKADG\njRuHBQsWAAAWLFiAcePGobKyEo2NjUin03j11VdzZWtqatDe3g6g9KwWZcEQjIZgYGAQNe64446c\n6Wfy5Ml44okncPzxx6Nv37740pe+hGnTpuHHP/4xvvOd72Ds2LG5ehdeeCHuvvtuHH300fj00097\n8A68KAuTka0iGKeygYFBFLj11ltx6623un679NJLXd+nTp2KqVOneuqOHTsWc+fOLSR5oVFeGgIM\nRzAwMDCQoSwYgu1DMCYjAwMDAznKgiHEsndZag4cAwMDg1JCeTAEszHNwMDAwBdlwRBsmLBTAwMD\nAznKgiGQnFPZwMDAoOeQT1I8oPB5kMoi7DSW8yr3KBkGBgYGrh3OQTFnzhxMmTIFo0aNipaoLMqE\nIdg+BMMRDAz2OLxyI7D542jbHDoB+PLd0sutra246KKL0NbWhrFjx2Ls2LEYN24czj//fNx1110Y\nO3Yszj77bFxwwQXYsWMH9t13X4wfP17YViklxisPk1H2r2EIBgYGUWDTpk24/vrr8dprr2HdunU4\n9dRT8corrwAA5s6dizPPPBMrV67EiBEjMG/ePKxZswY//elPAbh3OKfTadx5552YNm0a3n77beza\ntUuZGO/qq6/GAw88ULAsqWWhITjZTnuWDgMDgwJAIckXChUVFXj44YfxyCOPYMeOHRgyZAgaGhrQ\n3NyMvn37oq6uDsOHD8eiRYtw4okn4oYbbsjV5U1Gy5cvx7e//W0APZ8Yr2AaAiFkBiFkPiFkuk+5\nPxBCzikUHdk+AJiwUwMDg2gwY8YMXHTRRfjHP/6Buro6AMCRRx6JBx54AOeeey4AYObMmbj55psx\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2ee2670b2b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#n为训练次数,k为步长\n",
    "def show(n,k):\n",
    "    #计算Ein,Eout\n",
    "    Ein,Eout,W=PocketPLA(train,test,k,n)\n",
    "\n",
    "    #计算平均值\n",
    "    t=np.arange(1,n+1)\n",
    "    avgEin=np.cumsum(Ein)/t\n",
    "    avgEout=np.cumsum(Eout)/t\n",
    "    \n",
    "    #Ein作图\n",
    "    plt.plot(t,Ein,label='Ein')\n",
    "    plt.plot(t,avgEin,label='avgEin')\n",
    "    plt.title('Ein')\n",
    "    plt.xlabel('训练次数')\n",
    "    plt.ylabel('错误率')\n",
    "    plt.legend()\n",
    "    plt.show()\n",
    "\n",
    "    #Eout作图\n",
    "    plt.plot(t,Eout,label='Eout')\n",
    "    plt.plot(t,avgEout,label='avgEout')\n",
    "    plt.title('Eout')\n",
    "    plt.xlabel('训练次数')\n",
    "    plt.ylabel('错误率')\n",
    "    plt.legend()\n",
    "    plt.show()\n",
    "    \n",
    "show(1000,1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到$E_{in}(w(t)),E_{in} (\\hat w),E_{out} (\\hat w) $随着训练次数增加逐渐减少，而$E_{out} (w(t))$随着训练次数增加则波动较大。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 3.3 (Page 87)\n",
    "\n",
    "Consider the hat matrix $H = X(X^TX)^{-1}X^T$, where $X$ is an $N$ by $d+1$ matrix, and $X^TX$ is invertible. \n",
    "\n",
    "(a) Show that $H$ is symmetric. \n",
    "\n",
    "(b) Show that$ H^K = H$ for any positive integer $K$. \n",
    "\n",
    "(c) If $I$ is the identity matrix of size N, show that $(I - H)^K = I - H$ for any positive integer K. \n",
    "\n",
    "(d) Show that $trace(H) = d +1$, where the trace is the sum of diagonal elements. [Hint: $trace(AB) = trace(BA)$]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)证明$H$是对称矩阵\n",
    "$$\n",
    "\\begin{aligned}\n",
    "H^T&=(X(X^TX)^{-1}X^T)^T\n",
    "\\\\&=X((X^TX)^{-1})^TX^T\n",
    "\\\\&=X((X^TX)^T)^{-1}X^T\n",
    "\\\\&=X(X^TX)^{-1}X^T\n",
    "\\\\&=H\n",
    "\\end{aligned}\n",
    "$$\n",
    "(b)证明$ H^K = H$ ,直接验证即可，先来看$K=2$的情形\n",
    "$$\n",
    "\\begin{aligned}\n",
    "H^2&=X(X^TX)^{-1}X^TX(X^TX)^{-1}X^T\n",
    "\\\\&=X(X^TX)^{-1}X^T\n",
    "\\\\&=H\n",
    "\\end{aligned}\n",
    "$$\n",
    "那么对于任意$K$\n",
    "$$\n",
    "\\begin{aligned}\n",
    "H^K&=H^2H^{K-2}\n",
    "\\\\&=HH^{K-2}\n",
    "\\\\&=H^{K-1}\n",
    "\\\\&=...\n",
    "\\\\&=H\n",
    "\\end{aligned}\n",
    "$$\n",
    "(c)利用二项式定理直接打开验证\n",
    "$$\n",
    "\\begin{aligned}\n",
    "(I-H)^K&=\\sum_{i=0}^{i=K}C_K^iI^{K-i}(-H)^{i}\n",
    "\\\\&=\\sum_{i=0}^{i=K}C_K^i(-1)^iH^i\n",
    "\\\\&=I+H\\sum_{i=1}^{i=K}C_K^i(-1)^i(注意H^i=H)\n",
    "\\\\&=I+H[(1-1)^K-1]\n",
    "\\\\&=I-H\n",
    "\\end{aligned}\n",
    "$$\n",
    "(d)利用迹(trace)的性质$trace(AB) = trace(BA)$\n",
    "$$\n",
    "\\begin{aligned}\n",
    "trace(H)&=trace(X(X^TX)^{-1}X^T)\n",
    "\\\\&=trace(X^TX(X^TX)^{-1})\n",
    "\\\\&=trace(I_{d+1})(注意H^TH为(d+1)\\times (d+1)阶矩阵)\n",
    "\\\\&=d+1\n",
    "\\end{aligned}\n",
    "$$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 3.4 (Page 88)\n",
    "\n",
    "Consider a noisy target $y = w^{*T}x + \\epsilon$ for generating the data, where $\\epsilon$ is a noise term with zero mean and $\\sigma^2$ variance, independently generated for every example $(x, y) $. The expected error of the best possible linear fit to this target is thus  $\\sigma^2$ . \n",
    "\n",
    "For the data $\\mathcal{D} = \\{(x_1 , y_1 ), . . . , (x_N , y_N)\\}$, denote the noise in $yn$ as $\\epsilon_n$ and let $\\epsilon=[\\epsilon_1,\\epsilon_2,...,\\epsilon_N]^T$; assume that $X^TX$ is invertible. By fllowing the steps below, show that the expected in sample error of linear regression with respect to $\\mathcal D$ is given by . \n",
    "$$\n",
    "E_{\\mathcal D}[E_{in}(w_{lin})] = \\sigma^2(1-\\frac{d+1}N)\n",
    "$$\n",
    "(a) Show that the in sample estimate of is given by $\\hat y= Xw^* + H\\epsilon.$ \n",
    "\n",
    "(b) Show that the in sample error vector $\\hat y-y$ can be expressed by a matrix times $\\epsilon$. What is the matrix? \n",
    "\n",
    "(c) Express $E_{in}(w_{lin})$ in terms of $\\epsilon$ using (b ), and simplify the expression using Exercise 3.3(c). \n",
    "\n",
    "(d) Prove that $E_{\\mathcal D}[E_{in}(w_{lin})] = \\sigma^2(1-\\frac{d+1}N)$ using (c) and the independence of $\\epsilon_1,\\epsilon_2,...,\\epsilon_N$ . [Hint: The sum of the diagonal elements of a matrix (the trace) wil play a role. See Exercise 3.3]\n",
    "\n",
    "For the expected out of sample error, we take a special case which is easy to analyze. Consider a test data set $\\mathcal D_{test}=\\{(x_1 , {y^{'}_1} ), . . . , (x_N , {y^{'}_N})\\}$ which shares the same input vectors $x_n$ with $\\mathcal D$ but with a different realization of the noise terms. Denote the noise in $y^{'}_n$ as $\\epsilon^{'}_n$and let $\\epsilon^{'}=[\\epsilon^{'}_1,\\epsilon^{'}_2,...,\\epsilon^{'}_N]^T$. Define Etest(W!in) to be the average squared error on $\\mathcal D_{test}$.\n",
    "\n",
    "(e) Prove that $E_{\\mathcal D,\\epsilon^{'}}[E_{in}(w_{lin})] = \\sigma^2(1+\\frac{d+1}N) $. \n",
    "\n",
    "The special test error $E_{test}$ is a very restricted case of the general out-of sample error. Some detailed analysis shows that similar results can be obtained for the general case, as shown in Problem 3.1.    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)首先将$y = w^{*T}x + \\epsilon$改写为向量的形式，记$y=[y_1...y_N]^T,X=[x_1...x_N]^T$，注意题目中给出$\\epsilon=[\\epsilon_1,\\epsilon_2,...,\\epsilon_N]^T$\n",
    "\n",
    "那么\n",
    "$$\n",
    "y=Xw^*+\\epsilon\n",
    "$$\n",
    "\n",
    "\n",
    "我们知道$w_{lin}=(X^TX)^{-1}X^Ty$\n",
    "\n",
    "那么\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\hat y&=Xw_{lin}\n",
    "\\\\&=X(X^TX)^{-1}X^Ty\n",
    "\\\\&=X(X^TX)^{-1}X^T(Xw^* + \\epsilon)\n",
    "\\\\&=X(X^TX)^{-1}X^TXw^*+X(X^TX)^{-1}X^T\\epsilon\n",
    "\\\\&=Xw^*+H\\epsilon\n",
    "\\end{aligned}\n",
    "$$\n",
    "其中$H=X(X^TX)^{-1}X^T$的定义来自于Exercise 3.3\n",
    "\n",
    "(b)直接计算即可\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\hat y-y&=Xw^*+H\\epsilon-(Xw^*+\\epsilon)\n",
    "\\\\&=(H-I)\\epsilon\n",
    "\\end{aligned}\n",
    "$$\n",
    "(c)直接计算即可，注意要用到Exercise 3.3证明的性质\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E_{in}(w_{lin})&=\\frac 1N||\\hat y-y||^2\n",
    "\\\\&=\\frac 1N||(H-I)\\epsilon||^2\n",
    "\\\\&=\\frac 1N((H-I)\\epsilon)^T((H-I)\\epsilon)\n",
    "\\\\&=\\frac 1N \\epsilon^T(H-I)(H-I)\\epsilon(注意H对称)\n",
    "\\\\&=\\frac 1N \\epsilon^T(I-H)\\epsilon(注意(I - H)^K = I - H)\n",
    "\\\\&=\\frac 1N \\epsilon^T(I-H)\\epsilon\n",
    "\\end{aligned}\n",
    "$$\n",
    "(d)这题也是直接计算，注意要用到trace的性质和上题结论\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E_{\\mathcal D}[E_{in}(w_{lin})]&=\\frac 1N E_{\\mathcal D}( \\epsilon^T(I-H)\\epsilon)\n",
    "\\\\&=\\frac 1N E_{\\mathcal D}trace( \\epsilon^T(I-H)\\epsilon)(这一步是由于\\epsilon^T(I-H)\\epsilon是一个实数，对于实数a,a=trace(a))\n",
    "\\\\&=\\frac 1N E_{\\mathcal D}trace( \\epsilon^T\\epsilon-\\epsilon^TH\\epsilon))\n",
    "\\\\&=\\frac 1N [E_{\\mathcal D}(\\sum_{i=1}^N\\epsilon_i^2)-E_{\\mathcal D}(\\sum_{i=1}^N\\epsilon_iH_{ii}\\epsilon_i)](H_{ii}为H第(i,i)个元素)\n",
    "\\\\&=\\frac 1N [N\\sigma^2-(\\sum_{i=1}^NH_{ii})\\sigma^2]\n",
    "\\\\&=\\frac 1N [N\\sigma^2-trace(H)\\sigma^2](注意上一题结论trace(H)=d+1)\n",
    "\\\\&=\\frac 1N [N\\sigma^2-(d+1)\\sigma^2]\n",
    "\\\\&=\\sigma^2(1-\\frac{d+1}N)\n",
    "\\end{aligned}\n",
    "$$\n",
    "为了方便解决下一题，我们把上述计算中的两个结果单独列出\n",
    "$$\n",
    "E_{\\mathcal D}(\\epsilon^T\\epsilon)=N\\sigma^2\n",
    "\\\\E_{\\mathcal D}(\\epsilon^TH\\epsilon))=(d+1)\\sigma^2\n",
    "$$\n",
    "(e)首先还是改写为向量的形式$y^{'}=[y^{'}_1...y^{'}_N]^T,X=[x_1...x_N]^T,\\epsilon^{'}=[\\epsilon^{'}_1,\\epsilon^{'}_2,...,\\epsilon^{'}_N]^T$，那么\n",
    "$$\n",
    "y^{'}=Xw^*+\\epsilon^{'}\n",
    "$$\n",
    "那么由(a)的结论知\n",
    "$$\n",
    "\\hat y=Xw_{lin}=Xw^*+H\\epsilon\n",
    "$$\n",
    "因此\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E_{test}(w_{lin})&=\\frac 1N||\\hat y-y^{'}||^2\n",
    "\\\\&=\\frac 1N||Xw^*+H\\epsilon-(Xw^*+\\epsilon^{'})||^2\n",
    "\\\\&=\\frac 1N||H\\epsilon-\\epsilon^{'}||^2\n",
    "\\\\&=\\frac 1N(H\\epsilon-\\epsilon^{'})^T(H\\epsilon-\\epsilon^{'})\n",
    "\\\\&=\\frac 1N(\\epsilon^TH-\\epsilon^{'T})(H\\epsilon-\\epsilon^{'})(注意H对称)\n",
    "\\\\&=\\frac 1N(\\epsilon^THH\\epsilon-2\\epsilon^{'T}H\\epsilon+\\epsilon^{'T}\\epsilon^{'})\n",
    "\\\\&=\\frac 1N(\\epsilon^TH\\epsilon-2\\epsilon^{'T}H\\epsilon+\\epsilon^{'T}\\epsilon^{'})(注意H^K=H)\n",
    "\\end{aligned}\n",
    "$$\n",
    "接着我们计算$E_{\\mathcal D,\\epsilon^{'}}[E_{in}(w_{lin})]$\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E_{\\mathcal D,\\epsilon^{'}}[E_{in}(w_{lin})]&=E_{\\mathcal D,\\epsilon^{'}}[\\frac 1N(\\epsilon^TH\\epsilon-2\\epsilon^{'T}H\\epsilon+\\epsilon^{'T}\\epsilon^{'})]\n",
    "\\\\&=\\frac 1N[E_{\\mathcal D,\\epsilon^{'}}(\\epsilon^TH\\epsilon)-2E_{\\mathcal D,\\epsilon^{'}}(\\epsilon^{'T}H\\epsilon)+E_{\\mathcal D,\\epsilon^{'}}(\\epsilon^{'T}\\epsilon^{'})]\n",
    "\\end{aligned}\n",
    "$$\n",
    "回顾上一题单独列出的结论\n",
    "$$\n",
    "E_{\\mathcal D}(\\epsilon^T\\epsilon)=N\\sigma^2\n",
    "\\\\E_{\\mathcal D}(\\epsilon^TH\\epsilon))=(d+1)\\sigma^2\n",
    "$$\n",
    "因此\n",
    "$$\n",
    "E_{\\mathcal D,\\epsilon^{'}}[E_{in}(w_{lin})]=\\sigma^2(1+\\frac{d+1}N)-\\frac 2NE_{\\mathcal D,\\epsilon^{'}}(\\epsilon^{'T}H\\epsilon)\n",
    "$$\n",
    "后面我们单独计算$E_{\\mathcal D,\\epsilon^{'}}(\\epsilon^{'T}H\\epsilon)$，注意$\\epsilon_i,\\epsilon_i^{'}$独立且$E(\\epsilon_i)=E(\\epsilon_i^{'})=0$\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E_{\\mathcal D,\\epsilon^{'}}(\\epsilon^{'T}H\\epsilon)&=E_{\\mathcal D,\\epsilon^{'}}(trace(\\epsilon^{'T}H\\epsilon))\n",
    "\\\\&=E_{\\mathcal D,\\epsilon^{'}}(\\sum_{i=1}^N\\epsilon_i^{'}H_{ii}\\epsilon_i)\n",
    "\\\\&=\\sum_{i=1}^N(E(\\epsilon_i^{'})H_{ii}E(\\epsilon_i))(由独立性)\n",
    "\\\\&=0(数学期望为0)\n",
    "\\end{aligned}\n",
    "$$\n",
    "因此\n",
    "$$\n",
    "E_{\\mathcal D,\\epsilon^{'}}[E_{in}(w_{lin})]=\\sigma^2(1+\\frac{d+1}N)\n",
    "$$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 3.5 (Page 90)\n",
    "\n",
    "Another popular soft threshold is the hyperbolic tangent \n",
    "$$\n",
    "tanh(s) = \\frac{e^s -e^{-s}}{e^s +e^{-s}}\n",
    "$$\n",
    "(a) How is $tanh$ related to the logistic function $\\theta$? [Hint: shift and scale] \n",
    "\n",
    "(b) Show that $tanh(s)$ converges to a hard threshold for large $|s|$, and converges to no threshold for small $|s|$ [Hint: Formalize the figure below.]    \n",
    "\n",
    "![](https://github.com/Doraemonzzz/Learning-from-data/blob/master/photo/Chapter3/Exercise3.5.png?raw=true)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)我们先回顾$\\theta$的定义\n",
    "$$\n",
    "\\theta(s)=\\frac{e^s}{1+e^s}\n",
    "$$\n",
    "那么\n",
    "$$\n",
    "\\begin{aligned}\n",
    "tanh(s) &= \\frac{e^s -e^{-s}}{e^s +e^{-s}}\n",
    "\\\\&=\\frac{e^{2s}-1}{e^{2s}+1}\n",
    "\\\\&=\\frac{2e^{2s}-(1+e^{2s})}{e^{2s}+1}\n",
    "\\\\&=2\\frac{e^{2s}}{1+e^{2s}}-1\n",
    "\\\\&=2\\theta(2s)-1\n",
    "\\end{aligned}\n",
    "$$\n",
    "所以$tanh(s)$相当于$\\theta(s)$先沿x轴方向压缩2倍，再y轴方向扩张2倍，最右沿y轴向下平移一个单位\n",
    "\n",
    "(b)这题我不是很理解题目中所说的converges to no threshold for small $|s|$ ，我看了下论坛上老师的回复以及参考图片，猜测是threshold是水平渐近线的意思，所以我们计算$\\frac {tanh(s)}{s}$，这里使用了$Taylor$展开。\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\\\limit_{s\\to\\infty}\\frac{tanh(s)}s&=limit_{s\\to\\infty}\\frac{1-e^{-2s}}{(1+e^{-2s})s}\n",
    "\\\\&=limit_{s\\to\\infty}\\frac{1-(1-2s)}{(1+1-2s)s}\n",
    "\\\\&=0\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\\\limit_{s\\to0}\\frac{tanh(s)}s&=limit_{s\\to0} \\frac{e^s -e^{-s}}{e^s +e^{-s}}\n",
    "\\\\&=limit_{s\\to0}\\frac{1+s-(1-s)}{(1+s+(1-s))s}\n",
    "\\\\&=limit_{s\\to0}\\frac{2}{2}\n",
    "\\\\&=1\n",
    "\\end{aligned}\n",
    "$$\n",
    "所以当$|s|\\to \\infty$，$tanh(s)$有水平渐近线,$|s|\\to 0$，$tanh(s)$没有水平渐近线"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 3.6 (Page 92)\n",
    "\n",
    "[Cross-entropy error measure] \n",
    "\n",
    "(a) More generally, if we are learning from $±1$ data to predict a noisy target $P(y |x)$ with candidate hypothesis $h$, show that the maximum likelihood method reduces to the task of finding $h$ that minimizes \n",
    "$$\n",
    "E_{in}(w)=\\sum_{n=1}^N[\\![y_n=+1]\\!]ln\\frac{1}{h(x_n)}+[\\![y_n=-1]\\!]ln\\frac{1}{1-h(x_n)}\n",
    "$$\n",
    "(b) For the case $h(x) = \\theta(w^Tx)$, argue that minimizing the in sample error in part (a) is equivalent to minimizing the one in (3.9) . \n",
    "\n",
    "For two probability distributions ${p, 1 - p}$ and ${q, 1-q}$ with binary outcomes, the cross entropy (from information theory) is \n",
    "$$\n",
    "plog{\\frac 1 q}+(1-p)log{\\frac 1 {1-q}}\n",
    "$$\n",
    "The in sample error in part (a) corresponds to a cross entropy error measure on the data point $(x_n , y_n) $, with $p = [\\![y_n = +1]\\!]$ and $q = h(x_n).$    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)记最大似然函数为$L$\n",
    "$$\n",
    "L=\\prod_{i=1}^N(h(x_n))^{[\\![y_n=+1]\\!]}(1-h(x_n))^{[\\![y_n=-1]\\!]}\n",
    "\\\\lnL=e^{\\sum_{n=1}^N[\\![y_n=+1]\\!]ln{h(x_n)}+[\\![y_n=-1]\\!]ln{(1-h(x_n))}}\n",
    "$$\n",
    "因此要使得$L$最大，只要使$\\sum_{n=1}^N[\\![y_n=+1]\\!]ln{h(x_n)}+[\\![y_n=-1]\\!]ln{(1-h(x_n))}$最大即可，也就是使得$-(\\sum_{n=1}^N[\\![y_n=+1]\\!]ln{h(x_n)}+[\\![y_n=-1]\\!]ln{(1-h(x_n))})$最小，注意以下事实\n",
    "$$\n",
    "-(\\sum_{n=1}^N[\\![y_n=+1]\\!]ln{h(x_n)}+[\\![y_n=-1]\\!]ln{(1-h(x_n))})=\\sum_{n=1}^N[\\![y_n=+1]\\!]ln\\frac{1}{h(x_n)}+[\\![y_n=-1]\\!]ln\\frac{1}{1-h(x_n)}=E_{in}(w)\n",
    "$$\n",
    "因此结论成立。\n",
    "\n",
    "(b)回顾下3.9\n",
    "$$\n",
    "E^{'}_{in}(w)=\\frac 1N\\sum_{n=1}^Nln(1+e^{-y_nw^Tx_n})\n",
    "$$\n",
    "注意$\\theta(s)=\\frac{e^s}{1+e^s}$，那么\n",
    "$$\n",
    "\\theta(-s)=\\frac{e^{-s}}{1+e^{-s}}=\\frac{1}{1+e^{s}}=1-\\theta(s)\n",
    "\\\\h(x) = \\theta(w^Tx)= \\frac{e^{w^Tx}}{1+e^{w^Tx}}\n",
    "\\\\h(-x) = \\theta(w^T(-x))= 1-\\theta(w^Tx)=1-h(x)\n",
    "$$\n",
    "我们对这里的$E_{in}(w)$进行一个处理\n",
    "$$\n",
    "[\\![y_n=+1]\\!]ln\\frac{1}{h(x_n)}=[\\![y_n=+1]\\!]ln\\frac{1}{h(y_nx_n)}\n",
    "\\\\ [\\![y_n=-1]\\!]ln\\frac{1}{1-h(x_n)}=[\\![y_n=-1]\\!]ln\\frac{1}{h(-x_n)}=[\\![y_n=-1]\\!]ln\\frac{1}{h(y_nx_n)}\n",
    "$$\n",
    "代入我们这里的$E_{in}(w)$\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E_{in}(w)&=\\sum_{n=1}^N[\\![y_n=+1]\\!]ln\\frac{1}{h(x_n)}+[\\![y_n=-1]\\!]ln\\frac{1}{1-h(x_n)}\n",
    "\\\\&=\\sum_{n=1}^N([\\![y_n=+1]\\!]+[\\![y_n=-1]\\!])ln\\frac{1}{h(y_nx_n)}\n",
    "\\\\&=\\sum_{n=1}^Nln\\frac{1}{h(y_nx_n)}\n",
    "\\\\&=\\sum_{n=1}^Nln(\\frac{e^{y_nw^Tx}}{1+e^{y_nw^Tx}})^{-1}\n",
    "\\\\&=\\sum_{n=1}^Nln(1+e^{-y_nw^Tx_n})\n",
    "\\\\&=NE^{'}_{in}(w)\n",
    "\\end{aligned}\n",
    "$$\n",
    "因此最小化$E_{in}(w)$等价于最小化$E^{'}_{in}(w)$\n",
    "\n",
    "题目最后的意思是这里的结论可以和信息论里的结论类比。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 3.7 (Page 92)\n",
    "\n",
    "For logistic regression , show that \n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\nabla E_{in}(w)\n",
    "&=-\\frac 1N \\sum_{n=1}^N\\frac{y_nx_n}{1+e^{y_nw^Tx_n}}\n",
    "\\\\&=\\frac 1N \\sum_{n=1}^N-{y_nx_n}\\theta(-y_nw^Tx_n)\n",
    "\\end{aligned}\n",
    "$$\n",
    "Argue that a 'misclassified' example contributes more to the gradient than a correctly classified one.  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这题就是对logistic的$ E_{in}(w)$求梯度，回顾下$E_{in}(w)$\n",
    "$$\n",
    "E_{in}(w)=\\frac 1N\\sum_{n=1}^Nln(1+e^{-y_nw^Tx_n})\n",
    "$$\n",
    "注意$\\theta(s)=\\frac{e^s}{1+e^s}$\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\frac{\\partial E_{in}(w)}{\\partial{w_i}}\n",
    "&=\\frac 1N\\sum_{n=1}^N\\frac{ln(1+e^{-y_nw^Tx_n})}{\\partial{w_i}}\n",
    "\\\\&=\\frac 1N\\sum_{n=1}^N \\frac{1}{1+e^{-y_nw^Tx_n}}\\frac{\\partial e^{-y_nw^Tx_n}}{\\partial{w_i}}\n",
    "\\\\&=\\frac 1N\\sum_{n=1}^N \\frac{1}{1+e^{-y_nw^Tx_n}}(- e^{-y_nw^Tx_n})(y_nx_n^{(i)})(x_n^{(i)}表示x_n的第i个分量)\n",
    "\\\\&=\\frac 1N\\sum_{n=1}^N -y_nx_n^{(i)}\\frac{e^{-y_nw^Tx_n}}{1+e^{-y_nw^Tx_n}}\n",
    "\\\\&=\\frac 1N\\sum_{n=1}^N -y_nx_n^{(i)}\\frac{1}{1+e^{y_nw^Tx_n}}\n",
    "\\\\&=\\frac 1N\\sum_{n=1}^N-y_nx_n^{(i)}\\theta(-y_nw^Tx_n)\n",
    "\\end{aligned}\n",
    "$$\n",
    "因此\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\nabla E_{in}(w)\n",
    "&=-\\frac 1N \\sum_{n=1}^N\\frac{y_nx_n}{1+e^{y_nw^Tx_n}}\n",
    "\\\\&=\\frac 1N \\sum_{n=1}^N-{y_nx_n}\\theta(-y_nw^Tx_n)\n",
    "\\end{aligned}\n",
    "$$\n",
    "当一个样例错分时，$y_nw^Tx_n<0$，对应的$\\theta(-y_nw^Tx_n)>\\frac12$；当一个样例分类正确时，$y_nw^Tx_n>0$对应的$\\theta(-y_nw^Tx_n)<\\frac12$，因此错分的样例的权重比正确的样例要大。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 3.8 (Page 94)\n",
    "\n",
    "The claim that $\\hat v$ is the direction which gives largest decrease in $E_{in}$only holds for small $\\eta$. Why?    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "回顾下书上之前的叙述\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\Delta E_{in}&=E_{in}(w(0)+\\eta \\hat v)-E_{in}(w(0))\n",
    "\\\\&=\\eta \\nabla E_{in}(w(0))^T \\hat v+O(\\eta^2)\n",
    "\\\\&\\ge \\eta ||\\nabla E_{in}(w(0))||\n",
    "\\\\\\hat v&=-\\frac{\\nabla E_{in}(w(0))}{||\\nabla E_{in}(w(0))||}时等号成立\n",
    "\\end{aligned}\n",
    "$$\n",
    "这个式子是泰勒展开，所以$\\eta \\hat v$的模不能太大，如果太大，泰勒展开的偏差会很大。$\\hat v$是单位向量，因此$||\\eta \\hat v||=\\eta$，所以上述式子只有当$\\eta$较小的时候才有效。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 3.9 (Page 97)\n",
    "\n",
    "Consider pointwise error measures $e_{class}(s,y)=[\\![y\\neq sign(s)]\\!]$,$e_{sq}(s,y)=(y-s)^2$,and$ e_{log}(s,y)=ln(1+exp(-ys))$,where the signal $s=w^Tx$\n",
    "\n",
    "(a) For $y = +1$, plot $e_{class},e_{sq}$ and $\\frac 1{ln2}e_{log}$ versus $s$, on the same plot.\n",
    "\n",
    "(b) Show that $e_{class}(s,y)\\le e_{sq}(s,y)$, and hence that the classification\n",
    "error is upper bounded by the squared error.\n",
    "\n",
    "(c) Show that $e_{class}(s,y)\\le\\frac 1{ln2}e_{log}(s,y)$ ,and, as in part (b), get an\n",
    "upper bound (up to a constant factor) using the logistic regression\n",
    "error.\n",
    "These bounds indicate that minimizing the squared or logistic regression\n",
    "error should also decrease the classification error, which justifies using the\n",
    "weights returned by linear or logistic regression as approximations for classification."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a),(b),(c)三题作图即可"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus']=False #用来正常显示负号\n",
    "\n",
    "def Class(s,y):\n",
    "    if s*y>0:\n",
    "        return 0\n",
    "    else:\n",
    "        return 1\n",
    "    \n",
    "def Sq(s,y):\n",
    "    return (s-y)**2\n",
    "\n",
    "def Log(s,y):\n",
    "    return np.log(1+np.exp(-y*s))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x200900efa20>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x200900efcf8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#构造点\n",
    "x=np.arange(-2,2,0.01)\n",
    "\n",
    "#y=1\n",
    "eclass1=[Class(i,1) for i in x]\n",
    "esq1=[Sq(i,1) for i in x]\n",
    "elog1=[Log(i,1)/np.log(2) for i in x]\n",
    "\n",
    "#y=-1\n",
    "eclass2=[Class(i,-1) for i in x]\n",
    "esq2=[Sq(i,-1) for i in x]\n",
    "elog2=[Log(i,-1)/np.log(2) for i in x]\n",
    "\n",
    "plt.plot(x,eclass1,label='eclass')\n",
    "plt.plot(x,esq1,label='esq')\n",
    "plt.plot(x,elog1,label='elog')\n",
    "plt.title('y=1')\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "plt.plot(x,eclass2,label='eclass')\n",
    "plt.plot(x,esq2,label='esq')\n",
    "plt.plot(x,elog2,label='elog')\n",
    "plt.title('y=-1')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从图像中我们看出， $e_{sq}$ 和 $\\frac 1{ln2}e_{log}$ 都是$e_{class}$的上界，因此我们可以用线性回归或者logistic回归计算结果，再用产生的结果喂给PLA。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 3.10 (Page 98)\n",
    "\n",
    "(a)Define an error for a single data point $(x_n, y_n)$ to be \n",
    "$$\n",
    "e_n(w) = max(0, -y_nw^Tx_n)\n",
    "$$\n",
    "Argue that PLA can be viewed as SGD on $e_n$ with learning rate $\\eta = 1$. \n",
    "\n",
    "(b) For logistic regression with a very large $w$, argue that minimizing $E_{in}$ using SGD is similar to PLA. This is another indication that the logistic regression weights can be used as a good approximation for classification .   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " (a)$e_n(w) = max(0, -y_nw^Tx_n)$的意思是对于分类正确的点$e_{n}(w)=0$，对于分类不正确的点$e_n(w)=-y_nw^Tx_n $，我们来求梯度\n",
    "$$\n",
    "\\frac {\\partial(-y_nw^Tx_n)}{\\partial w_i}=-y_nx^{(i)}_n(x^{(i)}_n表示x_n的第i个分量)\n",
    "\\\\\\nabla(-y_nw^Tx_n)=-y_nx_n\n",
    "$$\n",
    "所以对于分类错误的点$(x_n,y_n)$，根据SGD,更新规则为\n",
    "$$\n",
    "w(t+1)=w(t)+\\eta(-\\nabla(-y_nw^Tx_n))=w(t)+\\eta y_nx_n\n",
    "$$\n",
    "所以PLA可以被看成$e_n(w) = max(0, -y_nw^Tx_n)$的SGD且$\\eta=1$的情形\n",
    "\n",
    "(b)我们知道logistic的梯度公式有如下形式\n",
    "$$\n",
    "\\nabla E_{in}(w)=-\\frac 1N \\sum_{n=1}^N\\frac{y_nx_n}{1+e^{y_nw^Tx_n}}\n",
    "$$\n",
    "那么对于SGD梯度即为\n",
    "$$\n",
    "\\nabla e_{in}(w)= \\frac{-y_nx_n}{1+e^{y_nw^Tx_n}}\n",
    "$$\n",
    "带入更新规则$w\\gets w-\\eta \\nabla e_{in}(w)$\n",
    "$$\n",
    "w(t+1)=w(t)+ \\frac{\\eta y_nx_n}{1+e^{y_nw^Tx_n}}\n",
    "$$\n",
    "我们注意更新的点一定是错误的，即$y_nw^Tx_n<0$，那么当$w$非常大时，$e^{y_nw^Tx_n}\\approx0$\n",
    "\n",
    "因此对于非常大的$w$，上述更新规则可以近似为\n",
    "$$\n",
    "w(t+1)=w(t)+ {\\eta y_nx_n}\n",
    "$$\n",
    "和PLA一致，这也从另一个角度说明了logistic是分类问题的一个近似"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 3.11 (Page 101)\n",
    "\n",
    "Consider the feature transform $\\phi$ in (3.12). What kind of boundary in $\\mathcal{X}$ does a hyperplane $\\hat w$ in $\\mathcal{Z}$ correspond to in the following cases? \n",
    "\n",
    "Draw a picture that illustrates an example of each case. \n",
    "\n",
    "(a) $\\hat w_1>0, \\hat w_2< 0 $\n",
    "\n",
    "(b) $\\hat w_1>0, \\hat w_2= 0 $\n",
    "\n",
    "(c) $\\hat w_1>0, \\hat w_2> 0,\\hat w_0<0 $\n",
    "\n",
    "(d) $\\hat w_1>0, \\hat w_2> 0,\\hat w_0>0 $  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "回顾下3.12\n",
    "$$\n",
    "\\phi(x)=(1,x_1^2,x_2^2)\n",
    "$$\n",
    "因此对应方程为\n",
    "$$\n",
    "\\hat w_0+\\hat w_1x_1^2+\\hat w_2 x_2^2=0\n",
    "$$\n",
    "后面的叙述实际上是高中解析几何的知识。\n",
    "\n",
    "(a)有三种可能，分别是$\\hat w_0=0,\\hat w_0>0,\\hat w_0<0$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sympy.parsing.sympy_parser import parse_expr  \n",
    "from sympy import plot_implicit \n",
    "ezplot = lambda exper: plot_implicit(parse_expr(exper))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2008ffc2588>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x20091b74710>"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ezplot('x1**2-x2**2')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\niDTy/2pM4dGFVp80AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2008ffebb38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x20091abb5f8>"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ezplot('1+x1**2-x2**2')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2008d9ba9b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x20091ca0dd8>"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ezplot('-1+x1**2-x2**2')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(b)有三种可能，分别是$\\hat w_0=0,\\hat w_0>0,\\hat w_0<0$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x20091cbdd68>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x20091cbd828>"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ezplot('-1+x1**2')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x20091d04588>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x20091d04080>"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ezplot('0+x1**2')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x20091ca6f98>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x2008edd0208>"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ezplot('1+x1**2')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(c)条件已经定死"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x20091f64198>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x20091f64e48>"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ezplot('-1+x1**2+x2**2')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(d)条件已经定死"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x20091e1e438>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x20091cbd160>"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ezplot('1+x1**2+x2**2')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 3.12 (Page 103)\n",
    "\n",
    "We know that in the Euclidean plane, the perceptron model $\\mathcal{H}$ cannot implement all 16 dichotomies on 4 points. That is, $m_{\\mathcal H}(4) < 16$. Take the feature transform $\\phi$ in (3.12). \n",
    "\n",
    "(a) Show that $m_{\\mathcal H \\phi}(3) = 8$. \n",
    "\n",
    "(b) Show that $m_{\\mathcal H \\phi}(4) < 16$. \n",
    "\n",
    "(c) Show that $m_{\\mathcal H \\bigcup\\mathcal H \\phi}(4) = 16$. \n",
    "\n",
    "That is, if you used lines, $d_{vc} = 3$; if you used elipses, $d_{vc} = 3$; if you used lines and elipses, $d_{vc} > 3$.    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "回顾下3.12\n",
    "$$\n",
    "\\phi(x)=(1,x_1^2,x_2^2)\n",
    "$$\n",
    "\n",
    "(a)作图即可，这里画图比较麻烦，略去了\n",
    "\n",
    "(b)我们找三个特殊的点"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x20091ebcb00>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "x=[-1,1,1]\n",
    "y=[-1,-1,1]\n",
    "plt.scatter(x,y)\n",
    "plt.scatter(-1,1)\n",
    "plt.xlim(-2,2)\n",
    "plt.ylim(-2,2)\n",
    "plt.plot([-2,2],[0,0])\n",
    "plt.plot([0,0],[-2,2])\n",
    "plt.xticks()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们用上一题给出的几种二次曲线图形去匹配，可以发现无法区分这种形式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(c)这里只列一种我们我们之前感知机无法表示的情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n0QAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x20092706400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.scatter([-1,1],[0,0])\n",
    "plt.scatter([0,0],[-1,1])\n",
    "plt.xlim(-2,2)\n",
    "plt.ylim(-2,2)\n",
    "plt.plot([-2,2],[0,0])\n",
    "plt.plot([0,0],[-2,2])\n",
    "plt.xticks()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这种形式可以用双曲线进行划分，其余的情形用直线可以轻松划分出来，这里不列出来了。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 3.13 (Page 104)\n",
    "\n",
    "Consider the feature transform $z=\\phi_2(x)$ in (3.13). How can we use a hyperplane $\\hat w$ in $\\mathcal Z$ to represent the following boundaries in $\\mathcal X$\n",
    "\n",
    "(a) parabola$ (x_1-3)^2+x_2 = 1$\n",
    "\n",
    "(b) The circle $(x_1-3)^2+(x_2 - 4)^2 =1$\n",
    "\n",
    "(c) The ellipse $2(x_1 - 3)^2+ (x_2-4)^2 = 1$\n",
    "\n",
    "(d) The hyperbola $(x_1 - 3)^2-(x_2-4)^2=1 $\n",
    "\n",
    "(e) The elipse $2(x_1+x_2-3)^2+(x_1 - x_2 - 4)^2 =1$\n",
    "\n",
    "(f) line $2x_1+x_2 =1 $   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "回顾3.13\n",
    "$$\n",
    "\\phi_2(x)= (1, x_1 , x_2 , x_1^2 , x_1x_2 , x_2^2)\n",
    "$$\n",
    "接下来分别打开上述6个式子即可\n",
    "\n",
    "(a)\n",
    "$$\n",
    "(x_1-3)^2+x_2 = 1\n",
    " \\\\ x_1^2-6x_1+9+x_2 -1=0\n",
    " \\\\8-6x_1+x_2+x_1^2=0\n",
    " \\\\\\hat w=(8,-6,1,1,0,0)\n",
    "$$\n",
    "(b)\n",
    "$$\n",
    "(x_1-3)^2+(x_2 - 4)^2 =1\n",
    "\\\\x_1^2-6x_1+x_2^2-8x_2+24=0\n",
    "\\\\\\hat w=(24,-6,-8,1,0,1)\n",
    "$$\n",
    "(c)\n",
    "$$\n",
    "2(x_1 - 3)^2+ (x_2-4)^2 = 1\n",
    "\\\\2(x_1^2-6x_1+9)+(x_2^2-8x_2+16)-1=0\n",
    "\\\\2x_1^2-12x_1+x_2^2-8x_2+33=0\n",
    "\\\\\\hat w=(33,-12,-8,2,0,1)\n",
    "$$\n",
    "(d)\n",
    "$$\n",
    "(x_1 - 3)^2-(x_2-4)^2=1\n",
    "\\\\x_1^2-6x_1+9-(x_2^2-8x_2+16)-1=0\n",
    "\\\\x_1^2-x_2^2+8x_2-6x_1-8=0\n",
    "\\\\\\hat w=(-8,-6,8,1,0,-1)\n",
    "$$\n",
    "(e)\n",
    "$$\n",
    "2(x_1+x_2-3)^2+(x_1 - x_2 - 4)^2 =1\n",
    "\\\\2[(x_1+x_2)^2+9-6(x_1+x_2)]+(x_1-x_2)^2-8(x_1-x_2)+16-1=0\n",
    "\\\\2(x_1^2+x_2^2+2x_1x_2+9-6x_1-6x_2)+x_1^2+x_2^2-2x_1x_2-8x_1+8x_2+15=0\n",
    "\\\\3x_1^2+3x_2^2+33-20x_1-4x_2+2x_1x_2=0\n",
    "\\\\ \\hat w=(33,-20,-4,3,2,3)\n",
    "$$\n",
    "(f)\n",
    "$$\n",
    "2x_1+x_2 =1\n",
    "\\\\2x_1+x_2 -1=0\n",
    "\\\\ \\hat w=(-1,2,1,0,0,0)\n",
    "$$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 3.14 (Page 105)\n",
    "\n",
    "Consider the $Q$th order polynomial transform $\\phi_Q$ for $\\mathcal{X}= R^d$. What is the dimensionality $\\widetilde d$ of the feature space $\\mathcal Z$ (excluding the fixed coordinate $z_0 = 1$). Evaluate your result on $d\\in  \\{2, 3, 5, 1\\} $and $Q\\in \\{2, 3, 5, 1\\}$.    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "注意设$x=(x_1...x_d)$，那么多项式转换的一般形式为$\\prod_{i=1}^d x_i^{n_i}$，那么$Q$次多项式相当于对此加了一个条件($z_0=1$不算在内)\n",
    "$$\n",
    "1\\le\\sum_{i=1}^{d}n_i\\le Q(n_i\\ge0)\n",
    "$$\n",
    "我们记$\\sum_{i=1}^{d}n_i=q(n_i\\ge0)$的解的数量为$f(q)$，那么$1\\le\\sum_{i=1}^{d}n_i\\le Q(n_i\\ge0)$的解的数量为\n",
    "$$\n",
    "\\\\\\sum_{q=1}^Qf(q)\n",
    "$$\n",
    "我们接下来求解$f(q)$，对式子稍做变形\n",
    "$$\n",
    "\\sum_{i=1}^{d}n_i=q(n_i\\ge0)\n",
    "\\\\ \\sum_{i=1}^{d}(n_i+1)=q+d(n_i\\ge0)\n",
    "\\\\令n_i+1=m_i，那么上式可化为\n",
    "\\\\ \\sum_{i=1}^{d}(m_i)=q+d(m_i\\ge1)\n",
    "\\\\所以求正整数解即可，隔板法可得\n",
    "\\\\f(q)=C_{q+d-1}^{d-1}\n",
    "$$\n",
    "因此\n",
    "$$\n",
    "\\hat h=\\sum_{q=1}^Qf(q)=\\sum_{q=1}^QC_{q+d-1}^{d-1}\n",
    "$$\n",
    "我们将$d=2$带入\n",
    "$$\n",
    "\\hat h=\\sum_{q=1}^Qf(q)=\\sum_{q=1}^QC_{q+1}^{1}=2+...(Q+1)=\\frac{Q(Q+3)}{2}\n",
    "$$\n",
    "符合课本104页的叙述"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "#### Exercise 3.15 (Page 106)\n",
    "\n",
    "High-dimensional feature transfrms are by no means the only transforms that we can use. We can take the tradeoff in the other direction, and use low dimensional feature transforms as well (to achieve an even lower generalization error bar).    Consider the following fature transform, which maps a $d$-dimensional $x$ to a one-dimensional $z$, keeping only the $k$th coordinate of x. \n",
    "$$\n",
    "\\phi_{(k)}(x)=(1,x_k)\n",
    "$$\n",
    "Let $\\mathcal{H_k}$ be the set of perceptrons in the feature space. \n",
    "\n",
    "(a) Prove that $d_{vc}(\\mathcal{H_k}) = 2$. \n",
    "\n",
    "(b) Prove that $d_{vc}(\\bigcup_{k=1}^d\\mathcal{H_k})\\le 2(log_2 d +1)$. \n",
    "\n",
    "$\\mathcal{H_k}$ is called the decision stump model on dimension $k$.    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)这个比较简单，$\\mathcal{H_k}$是特征空间里的感知机，并且特征空间的维度为1，因此根据感知机的性质，我们知道$d_{vc}(\\mathcal{H_k}) = 1+1=2$\n",
    "\n",
    "(b)我们来看下$\\mathcal{H_k}$的具体形式，设参数为$(w_0,w_1)$，那么对应的边界平面为\n",
    "$$\n",
    "w_0+w_1x_k=0\n",
    "\\\\x_k=-\\frac{w_0}{w_1}\n",
    "$$\n",
    "因此$\\mathcal{H_k}$划分方法可以理解为看第$k$个下标，如果$x_k$大于阈值$-\\frac{w_0}{w_1}$，标记为1，反之标记为-1，或者反过来(大于$-\\frac{w_0}{w_1}$标记为-1,小于$-\\frac{w_0}{w_1}$标记为1)。\n",
    "\n",
    "假设现在有$N$个点，现在来计算$\\mathcal H_{ k}$能区分的数量，先对这$N$个点的第$k$个坐标排序，**先不管全1或者全-1的两种情况**，那么$\\mathcal H_{ k}$相当于在这$N$个$x_k$的$N-1$个间隔挑选，一共可以有$N-1$种选择，那么由于大于阈值可以为1，也可以为-1，所以一共可以区分$2(N-1)$种情形，因此\n",
    "$$\n",
    "除去全1或者全-1的情况，每个\\mathcal{H_k}可以区分2N-2种情形\n",
    "$$\n",
    "那么$\\bigcup_{k=1}^d\\mathcal{H_k}$一共可以表示$f(N)=2(N-1)\\times d+2$种情形，注意我们这里为了更加准确，全1或者全-1的情形合并在一起统计了。当$N=2(log_2 d +1)$时\n",
    "$$\n",
    "\\begin{aligned}\n",
    "f(N)&=2(N-1)\\times d+2\n",
    "\\\\&=2(2log_2d+1)\\times d+2\n",
    "\\end{aligned}\n",
    "$$\n",
    "我们来证明\n",
    "$$\n",
    "f(N)=2(2log_2d+1)\\times d+2\\le 2^N=2^{2(log_2 d +1)}=4d^2\n",
    "$$\n",
    "接着我们来进行一些处理\n",
    "$$\n",
    "2(2log_2d+1)\\times d+2\\le4d^2\\Leftrightarrow\n",
    "\\\\ 2d(2log_2d+1)\\le4d^2-2\\Leftrightarrow\n",
    "\\\\2log_2d+1\\le2d-\\frac 1d\\Leftrightarrow\n",
    "\\\\2d-\\frac 1d-2log_2d-1\\ge0\n",
    "$$\n",
    "记$g(d)=2d-\\frac 1d-2log_2d-$1，求导得\n",
    "$$\n",
    "g^{'}(d)=2+\\frac 1{d^2}-\\frac {2}{dln2}\n",
    "\\\\g^{'}(d)=(\\frac 1{d}-\\frac {1}{ln2})^2+2-(\\frac {1}{ln2})^2\n",
    "\\\\将(\\frac 1{d}-\\frac {1}{ln2})^2+2-(\\frac {1}{ln2})^2看成关于\\frac 1 d的二次函数，由二次函数的性质可得\n",
    "\\\\g^{'}(d)\\ge g^{'}(1)=3-\\frac {2}{ln2}>0\n",
    "$$\n",
    "所以$g(d)$在$[1,+\\infty)$递增递增，$g(d)\\ge g(1)=0$\n",
    "\n",
    "因此\n",
    "$$\n",
    "f(N)\\le2^N(N=2(log_2 d +1))\n",
    "$$\n",
    "从而可得\n",
    "$$\n",
    "d_{vc}(\\bigcup_{k=1}^d\\mathcal{H_k})\\le 2(log_2 d +1)\n",
    "$$\n",
    "这是因为在$N=2(log_2 d +1)$表示的种类数量小于等于$2^N$，所以最多shatter $2(log_2 d +1)$个点。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 3.16 (Page 106)\n",
    "\n",
    "Write down the steps of the algorithm that combines $\\phi_3$ with linear regression. How about using $\\phi_{10}$ instead? Where is the main computational bottleneck of the resulting algorithm?    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这部分可以参考课本86页。我们直接对$\\phi_k$进行总结,记特征空间的维度为$\\widetilde d$，原始数据为$(x_1...x_N),(y_1...y_N)$。\n",
    "\n",
    "第一步进行特征转换，记得到的新的数据为$(\\widetilde x_1...\\widetilde x_N)$，构成的矩阵为$\\widetilde X$\n",
    "\n",
    "第二步计算$(\\widetilde X^T\\widetilde X)^{-1}\\widetilde X^T$\n",
    "\n",
    "第三步计算$(\\widetilde X^T\\widetilde X)^{-1}\\widetilde X^Ty$\n",
    "\n",
    "主要计算时间应该是第二部求逆矩阵。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Part 2:Problems"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "#### Problem 3.1 (Page 109)\n",
    "\n",
    "Consider the double semi-circle \"toy\" learning task below.    \n",
    "\n",
    "![](https://github.com/Doraemonzzz/Learning-from-data/blob/master/photo/Chapter3/Problem3.1.png?raw=true)\n",
    "\n",
    "There are two semi circles of width $thk$ with inner radius $rad$, separated by sep as shown (red is -1 and blue is +1). The center of the top semi circle is aligned with the middle of the edge of the bottom semi circle. This task is linearly separable when $sep\\ge0$, and not so for $sep<0$. Set $rad = 10, thk = 5$ and $sep = 5$. Then, generate 2,000 examples unifrmly, which means you will have approximately 1, 000 examples for each class. \n",
    "\n",
    "(a) Run the PLA starting from $w = 0$ until it converges. Plot the data and the final hypothesis. \n",
    "\n",
    "(b) Repeat part (a) using the linear regression (for classification) to obtain $w$. Explain your observations.    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这题看了非常久，楞是不明白什么意思，后来看了论坛里老师的回复才明白。题目的意思是有如图两个圆环，我们要在圆环内的区域随机生成点，然后用PLA和线性回归进行分类。我们先生成数据，这里我们将上半个圆环对应的圆心放在(a,b)，那么下半个圆环对应的圆心为$(a+rad+\\frac {thk}{2},b-sep)$。为方便叙述，这里记录上半个圆环的圆心为$(X_1,Y_2)$，下半个圆环的圆心为$(X_2,Y_2)$。\n",
    "\n",
    "接着介绍生成点的方式，我们在$[-rad-thk,rad+thk]\\times[-rad-thk,rad+thk]$随机生成点，如果这个点$(x,y)$落在$rad^2\\le x^2+y^2\\le(rad+thk)^2$范围内，那么当$y>0$时，我们把这个点给上半个圆环，产生点**$(X_1+x,Y_1+y)$**，当$y<0$时，我们把这个点给下半个圆环，产生点$(X_2+x,Y_2+y)$；如果产生的点不在$rad^2\\le x^2+y^2\\le(rad+thk)^2$范围内，则重新产生点即可。这里产生点的方法有点类似参数方程的思路，**即产生相对于圆心的相对位置**，下面编程实现一下。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "#参数\n",
    "rad=10\n",
    "thk=5\n",
    "sep=5\n",
    "\n",
    "#n为产生点的个数,x1,y1为上半个圆环的坐标\n",
    "def generatedata(rad,thk,sep,n,x1=0,y1=0):\n",
    "    #上半个圆的圆心\n",
    "    X1=x1\n",
    "    Y1=y1\n",
    "\n",
    "    #下半个圆的圆心\n",
    "    X2=X1+rad+thk/2\n",
    "    Y2=Y1-sep\n",
    "    \n",
    "    #上半个圆环的点\n",
    "    top=[]\n",
    "    #下半个圆环的点\n",
    "    bottom=[]\n",
    "    \n",
    "    #后面要用到的参数\n",
    "    r1=rad+thk\n",
    "    r2=rad\n",
    "    \n",
    "    cnt=1\n",
    "    while(cnt<=n):\n",
    "        #产生均匀分布的点\n",
    "        x=np.random.uniform(-r1,r1)\n",
    "        y=np.random.uniform(-r1,r1)\n",
    "        \n",
    "        d=x**2+y**2\n",
    "        if(d>=r2**2 and d<=r1**2):\n",
    "            if (y>0):\n",
    "                top.append([X1+x,Y1+y])\n",
    "                cnt+=1\n",
    "            else:\n",
    "                bottom.append([X2+x,Y2+y])\n",
    "                cnt+=1\n",
    "        else:\n",
    "            continue\n",
    "\n",
    "    return top,bottom"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接着作图看下"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nIYQkhP8PWyHpiHso5EUAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ecde6a3588>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "top,bottom=generatedata(rad,thk,sep,1000)\n",
    "\n",
    "X1=[i[0] for i in top]\n",
    "Y1=[i[1] for i in top]\n",
    "\n",
    "X2=[i[0] for i in bottom]\n",
    "Y2=[i[1] for i in bottom]\n",
    "\n",
    "plt.scatter(X1,Y1,s=1)\n",
    "plt.scatter(X2,Y2,s=1)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到和圆环形状还是很接近的，接着我们处理(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ecde7a6a20>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#对数据预处理，加上标签和偏移项1\n",
    "x1=[[1]+i+[1] for i in top]\n",
    "x2=[[1]+i+[-1] for i in bottom]\n",
    "data=x1+x2\n",
    "    \n",
    "data=np.array(data)\n",
    "np.random.shuffle(data)\n",
    "\n",
    "#PLA\n",
    "#定义sign函数\n",
    "def sign(x):\n",
    "    if x>0:\n",
    "        return 1\n",
    "    else:\n",
    "        return -1\n",
    "\n",
    "#定义判别函数，判断所有数据是否分类完成\n",
    "def Judge(x,w):\n",
    "    #n为数据维度\n",
    "    n=x.shape[1]-1\n",
    "    flag=1\n",
    "    for i in x:\n",
    "        if sign(i[:n].dot(w))*i[-1]<0:\n",
    "            flag=0\n",
    "            break\n",
    "    return flag\n",
    "\n",
    "#定义PLA,k为步长\n",
    "def PLA(x,k):\n",
    "    #n为数据维度,m为数据数量,\n",
    "    m,n=x.shape\n",
    "    n-=1\n",
    "    #初始化向量\n",
    "    w=np.zeros(n)\n",
    "    #记录最后一个更新的向量\n",
    "    last=0\n",
    "    #记录次数\n",
    "    t=0\n",
    "    if Judge(x,w):\n",
    "        pass\n",
    "    else:\n",
    "        #记录取哪个元素\n",
    "        j=0\n",
    "        while Judge(x,w)==0:\n",
    "            i=x[j]\n",
    "            #print(i[:n],i[-1])\n",
    "            if sign(i[:n].dot(w))*i[-1]<0:\n",
    "                w+=k*i[-1]*i[:n]\n",
    "                t+=1\n",
    "                last=j\n",
    "            j+=1\n",
    "            if(j>=m):\n",
    "                j=j%m\n",
    "    return t,last,w\n",
    "t,last,w=PLA(data,1)\n",
    "\n",
    "#作图\n",
    "r=2*(rad+thk)\n",
    "X3=[-r,r]\n",
    "Y3=[-(w[0]+w[1]*i)/w[2] for i in X3]\n",
    "\n",
    "plt.scatter(X1,Y1,s=1)\n",
    "plt.scatter(X2,Y2,s=1)\n",
    "plt.plot(X3,Y3)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(b)依旧要对数据作预处理，然后直接带入线性回归的公式即可"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ecde73fac8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from numpy.linalg import inv\n",
    "\n",
    "#对数据预处理\n",
    "x1=[[1]+i for i in top]\n",
    "y1=[1]*len(top)\n",
    "\n",
    "x2=[[1]+i for i in bottom]\n",
    "y2=[-1]*len(bottom)\n",
    "\n",
    "X=np.array(x1+x2)\n",
    "Y=np.array(y1+y2)\n",
    "\n",
    "w1=inv(X.T.dot(X)).dot(X.T).dot(Y)\n",
    "\n",
    "#作图\n",
    "t=2*(rad+thk)\n",
    "X4=[-t,t]\n",
    "Y4=[-(w1[0]+w1[1]*i)/w1[2] for i in X4]\n",
    "\n",
    "\n",
    "plt.scatter(X1,Y1,s=1)\n",
    "plt.scatter(X2,Y2,s=1)\n",
    "plt.plot(X4,Y4)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到，线性回归同样能解决这个分类问题，和课本里的描述一致，相比PLA，线性回归得到的直线距离点集的间距更大。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 3.2 (Page 109)\n",
    "\n",
    "For the double semi circle task in Problem 3.1, vary $sep$ in the range $\\{0.2, 0.4, . . . , 5\\}$. Generate 2,000 examples and run the PLA starting with $w = 0$. Record the number of iterations PLA takes to converge. \n",
    "\n",
    "Plot $sep$ versus the number of iterations taken for PLA to converge. Explain your observations. [Hint: Problem 1.3.] "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "和上题一致，不过这里改变了$sep$，我们要观察$sep$和迭代次数的关系，注意这里我们更换下上半个圆环的圆心"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "#参数\n",
    "rad=10\n",
    "thk=5\n",
    "sep=np.arange(0.2,5.2,0.2)\n",
    "\n",
    "T=np.array([])\n",
    "\n",
    "for k in sep:\n",
    "    top,bottom=generatedata(rad,thk,k,2000,5,10)\n",
    "    x1=[[1]+i+[1] for i in top]\n",
    "    x2=[[1]+i+[-1] for i in bottom]\n",
    "    data=x1+x2\n",
    "\n",
    "    data=np.array(data)\n",
    "    np.random.shuffle(data)\n",
    "    \n",
    "    #维度\n",
    "    n=len(data[0])-1\n",
    "    #数据组数\n",
    "    m=len(data)\n",
    "    \n",
    "    t,last,w=PLA(data,1)\n",
    "    \n",
    "    T=np.append(T,t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2968e4f5b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus']=False #用来正常显示负号\n",
    "\n",
    "plt.plot(sep,T)\n",
    "plt.title('sep和迭代次数的关系')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到$sep$越大，迭代次数总体来说在下降。现在来简单分析下原因，回顾Problem 1.3(Page 33)\n",
    "$$\n",
    "\\rho = {min}_{1\\le n\\le N} y_n(w^{*T} x_n )\n",
    "\\\\ R = {max}_{1\\le n\\le N} ||xn ||\n",
    "\\\\t\\le \\frac {R^2||w^*||^2} {\\rho^2}\n",
    "$$\n",
    "这里圆环的位置固定，所以可以认为$R$是一个常数，我们来分析$\\frac {||w^*||} {\\rho}$。\n",
    "\n",
    "由解析几何知识，我们知道$\\frac {||w^{T} x_n||}{||w^{}||}$为$x_n$到平面$w^{T}x=0$的距离，而题目中的$\\frac {||w^*||} {\\rho}$相当于点集到平面$w^{*T}x=0$的最小距离的倒数，因此如果$sep$越大，最小距离也越大，从而$\\frac {||w^*||} {\\rho}$越小，迭代次数相应也会减少"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 3.3 (Page 109)\n",
    "\n",
    "For the double semi circle task in Problem 3.1, set $sep = -5$ and generate 2, 000 examples. \n",
    "\n",
    "(a) What will happen if you run PLA on those examples? \n",
    "\n",
    "(b) Run the pocket algorithm for 100,000 iterations and plot $E_{in}$ versus the iteration number t. \n",
    "\n",
    "(c) Plot the data and the final hypothesis in part (b).    \n",
    "\n",
    "(d) Use the linear regression algorithm to obtain the weights w, and compare this result with the pocket algorithm in terms of computation time and quality of the solution . \n",
    "\n",
    "(e) Repeat (b) - (d) with a 3rd order polynomial fatu re transform.       \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "这题的$sep<0$，所以数据不可分\n",
    "\n",
    "(a)如果运行PLA，那么算法不会停下来\n",
    "\n",
    "(b)回顾下Pocket PLA\n",
    "\n",
    "![](https://github.com/Doraemonzzz/Learning-from-data/blob/master/photo/Chapter3/Problem3.3.png?raw=true)\n",
    "\n",
    "编程实现，题目要求迭代十万次，我发现十万次实在是太慢了，所以改为10000次，先作图看一下"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ecde69e780>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#参数\n",
    "rad=10\n",
    "thk=5\n",
    "sep=-5\n",
    "\n",
    "#产生数据\n",
    "top,bottom=generatedata(rad,thk,sep,2000)\n",
    "\n",
    "#作图\n",
    "X1=[i[0] for i in top]\n",
    "Y1=[i[1] for i in top]\n",
    "\n",
    "X2=[i[0] for i in bottom]\n",
    "Y2=[i[1] for i in bottom]\n",
    "\n",
    "plt.scatter(X1,Y1,s=1)\n",
    "plt.scatter(X2,Y2,s=1)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接着编写Pocket PLA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#Pocket PLA\n",
    "#定义sign函数\n",
    "def sign(x):\n",
    "    if x>0:\n",
    "        return 1\n",
    "    else:\n",
    "        return -1\n",
    "\n",
    "#定义计算错误个数的函数\n",
    "def CountError(x,w):\n",
    "    #数据维度\n",
    "    n=x.shape[1]-1\n",
    "    #记录错误次数\n",
    "    count=0\n",
    "    for i in x:\n",
    "        if sign(i[:n].dot(w))*i[-1]<0:\n",
    "            count+=1\n",
    "    return count\n",
    "\n",
    "\n",
    "#定义PocketPLA,k为步长,max为最大更新次数\n",
    "def PocketPLA(x,k,maxnum):\n",
    "    #n为数据维度,m为数据数量\n",
    "    m,n=x.shape\n",
    "    #注意多了一个标志位\n",
    "    n-=1\n",
    "    #初始化向量\n",
    "    w=np.zeros(n)\n",
    "    #错误率最小的向量\n",
    "    w0=np.zeros(n)\n",
    "    error=CountError(x,w)\n",
    "    #记录每次的错误\n",
    "    Error=[]\n",
    "    if error==0:\n",
    "        pass\n",
    "    else:\n",
    "        #记录次数\n",
    "        j=0\n",
    "        while (j<maxnum or error==0):\n",
    "            #随机选取数据\n",
    "            k=np.random.randint(0,m)\n",
    "            i=x[k]\n",
    "            #得到w(t+1)\n",
    "            w=w0+k*i[-1]*i[:n]\n",
    "            error1=CountError(x,w)\n",
    "            #如果w(t+1)比w(t)效果好，则更新w(t)\n",
    "            if error>error1:\n",
    "                w0=w[:]\n",
    "                error=error1\n",
    "            Error.append(error)\n",
    "            j+=1\n",
    "    return w0,Error"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "带入算法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#对数据预处理，加上标签和偏移项1\n",
    "x1=[[1]+i+[1] for i in top]\n",
    "x2=[[1]+i+[-1] for i in bottom]\n",
    "data=x1+x2\n",
    "    \n",
    "data=np.array(data)\n",
    "np.random.shuffle(data)\n",
    "\n",
    "#迭代次数\n",
    "num=10000\n",
    "\n",
    "w,error=PocketPLA(data,1,num)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(b)的图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x286f6da5ba8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "t=np.arange(num)\n",
    "plt.plot(t,np.array(error)/data.shape[0])\n",
    "plt.title('Ein VS t')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(c)的图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x286f8f23668>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pocket PLA的错误率0.092\n"
     ]
    }
   ],
   "source": [
    "plt.scatter(X1,Y1,s=1)\n",
    "plt.scatter(X2,Y2,s=1)\n",
    "t=2*(rad+thk)\n",
    "X3=[-t,t]\n",
    "Y3=[-(w[0]+w[1]*i)/w[2] for i in X3]\n",
    "plt.plot(X3,Y3)\n",
    "plt.title('Pocket PLA')\n",
    "plt.show()\n",
    "print('Pocket PLA的错误率'+str(CountError(data,w)/data.shape[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(d)linear regression，之前有处理过，直接带公式即可"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nUUqE/wchoSyKbM4IHAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x286f6dc6a90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "linear regression的错误率0.1005\n"
     ]
    }
   ],
   "source": [
    "#对数据预处理\n",
    "x1=[[1]+i for i in top]\n",
    "y1=[1]*len(top)\n",
    "\n",
    "x2=[[1]+i for i in bottom]\n",
    "y2=[-1]*len(bottom)\n",
    "\n",
    "X=np.array(x1+x2)\n",
    "Y=np.array(y1+y2)\n",
    "\n",
    "w1=inv(X.T.dot(X)).dot(X.T).dot(Y)\n",
    "\n",
    "#作图\n",
    "t=2*(rad+thk)\n",
    "X4=[-t,t]\n",
    "Y4=[-(w1[0]+w1[1]*i)/w1[2] for i in X4]\n",
    "\n",
    "plt.scatter(X1,Y1,s=1)\n",
    "plt.scatter(X2,Y2,s=1)\n",
    "plt.plot(X4,Y4)\n",
    "plt.title('linear regression')\n",
    "plt.show()\n",
    "print('linear regression的错误率'+str(CountError(data,w1)/data.shape[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(e)先做三次特征转换，再重复(b)到(d)，注意到三次特征转换为\n",
    "$$\n",
    "\\phi_3(x)=(1,x_1,x_2,x_1x_2,x_1^2,x_2^2,x_1^3,x_1^2x_2,x_1x_2^2,x_2^3)\n",
    "$$\n",
    "后续作曲线的图用到了plt.contour函数，原本是用来绘制等高线的，这里可以用来画隐函数的图像"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#data形式为[  1.        ,   3.05543009,  -3.72519952,  -1.        ]\n",
    "#特征转换\n",
    "def transform(data):\n",
    "    result=[]\n",
    "    for i in data:\n",
    "        x1=i[1]\n",
    "        x2=i[2]\n",
    "        flag=i[-1]\n",
    "        x=[1,x1,x2,x1*x2,x1**2,x2**2,x1**3,(x1**2)*x2,x1*(x2**2),x2**3,flag]\n",
    "        result.append(x)\n",
    "    return np.array(result)\n",
    "\n",
    "newdata=transform(data)\n",
    "\n",
    "# 定义等高线高度函数\n",
    "def f(x,y,w):\n",
    "    return w[0]+w[1]*x+w[2]*y+w[3]*x*y+w[4]*(x**2)+w[5]*(y**2)+w[6]*(x**3)+w[7]*(x**2)*y+w[8]*x*(y**2)+w[9]*y**3\n",
    "\n",
    "# 数据数目\n",
    "n = 2000\n",
    "# 定义x, y\n",
    "x = np.linspace(-t, t, n)\n",
    "y = np.linspace(-t, t, n)\n",
    "\n",
    "# 生成网格数据\n",
    "X, Y = np.meshgrid(x, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将转换过的数据带入Pocket PLA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#迭代次数\n",
    "num=10000\n",
    "\n",
    "w,error=PocketPLA(newdata,1,num)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "作图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nCngRkUT9H8FRCV8lvC3LAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x286f41da860>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "特征转换后的错误率为0.093\n"
     ]
    }
   ],
   "source": [
    "plt.contour(X, Y, f(X, Y,w), 1, colors = 'red')\n",
    "plt.scatter(X1,Y1,s=1)\n",
    "plt.scatter(X2,Y2,s=1)\n",
    "plt.title('特征转换后的PLA')\n",
    "plt.show()\n",
    "print('特征转换后的错误率为'+str(CountError(newdata,w)/newdata.shape[0]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "t=1000\n",
    "n=10000\n",
    "x = np.linspace(-t, t, n)\n",
    "y = np.linspace(-t, t, n)\n",
    "\n",
    "# 生成网格数据\n",
    "X, Y = np.meshgrid(x, y)\n",
    "plt.contour(X, Y, f(X, Y,w), 1, colors = 'red')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 数据数目\n",
    "n = 10000\n",
    "# 定义x, y\n",
    "x = np.linspace(-100, 100, n)\n",
    "y = np.linspace(-100, 100, n)\n",
    "\n",
    "# 生成网格数据\n",
    "X, Y = np.meshgrid(x, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将转换后的数据带入linear regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2968d60b978>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "特征转换后的错误率为0.009\n"
     ]
    }
   ],
   "source": [
    "#对数据预处理\n",
    "Xnew=newdata[:,:-1]\n",
    "Ynew=newdata[:,-1]\n",
    "\n",
    "w1=inv(Xnew.T.dot(Xnew)).dot(Xnew.T).dot(Ynew)\n",
    "\n",
    "plt.contour(X, Y, f(X, Y,w1), 1, colors = 'red')\n",
    "plt.scatter(X1,Y1,s=1)\n",
    "plt.scatter(X2,Y2,s=1)\n",
    "plt.title('特征转换后的linear regression')\n",
    "plt.show()\n",
    "print('特征转换后的错误率为'+str(CountError(newdata,w1)/newdata.shape[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "#### Problem 3.4 (Page 110)\n",
    "\n",
    "In Problem 1.5, we introduced the Adaptive Linear Neuron (Ada line) algorithm for classification. Here, we derive Ada line from an optimization perspective.\n",
    "\n",
    " (a) Consider $E_n (w) = (\\max(0, 1 - y_nw^Tx_n))^2$ . Show that $E_n (w)$ is continuous and differentiable. Write down the gradient $\\nabla E_n (w)$ . \n",
    "\n",
    "(b) Show that $E_n (w)$ is an upper bound for $[\\![sign(w^Tx_n) \\ne y_n]\\!] $. Hence, $\\frac 1N \\sum_{n=1}^N E_n (w) $is an upper bound for the in sample classification error $E_{in} (w)$ . \n",
    "\n",
    "(c) Argue that the Adaline algorithm in Problem 1.5 performs stochastic gradient descent on $\\frac 1N \\sum_{n=1}^N E_n (w) $ .    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)$1 - y_nw^Tx_n$关于$w$是连续的，$max(a,x)$关于x是连续的，所以$\\max(0, 1 - y_nw^Tx_n)$关于$w$是连续的，连续函数的平方也是连续的，所以$E_n (w) = (\\max(0, 1 - y_nw^Tx_n))^2$ 关于$w$连续。再来看可导性，令$s(w)=1 - y_nw^Tx_n$,$s(w)$显然关于$w$可导性,我们再来看下$f(s)=(max(0,s))^2$\n",
    "$$\n",
    "f(s)=\\begin{cases}\n",
    "s^2(s\\ge0)\n",
    "\\\\0(s<0)\n",
    "\\end{cases}\n",
    "$$\n",
    "显然这个函数也是可导的。所以$E_n (w)=f(s(w))$也可导。接下来我们求梯度\n",
    "$$\n",
    "\\frac{\\partial E_{n(w)}}{w_k}\n",
    "=\\begin{cases}\n",
    "\\frac{\\partial (1 - y_nw^Tx_n)^2}{\\partial w_k}=(1 - y_nw^Tx_n)(-y_nx_n^k)\\qquad\\ (y_nw^Tx_n\\le1)\n",
    "\\\\0\\qquad\\qquad\\qquad\\qquad\\qquad\\qquad\\qquad\\ ( y_nw^Tx_n>1)\n",
    "\\end{cases}\n",
    "$$\n",
    "因此\n",
    "$$\n",
    "\\nabla E_n (w) =\\begin{cases}\n",
    "(1 - y_nw^Tx_n)(-y_nx_n)\\qquad\\ \\ \\ \\ (y_nw^Tx_n\\le1)\n",
    "\\\\0 \\qquad\\qquad\\qquad\\qquad\\qquad(y_nw^Tx_n>1)\n",
    "\\end{cases}\n",
    "$$\n",
    "(b)作图，我们先对式子做点变形\n",
    "$$\n",
    "[\\![sign(w^Tx_n) \\ne y_n]\\!]  \\Leftrightarrow\n",
    "\\\\ [\\![y_n\\times sign(w^Tx_n) \\ne y_n\\times y_n]\\!] \\Leftrightarrow\n",
    "\\\\ [\\![sign(y_nw^Tx_n) \\ne1]\\!]\n",
    "$$\n",
    "令$s=sign(y_nw^Tx_n)$\n",
    "\n",
    "说以上述两个式子可以化为$(max(0,1-s))^2$以及$[\\![sign(s) \\ne1]\\!]$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2968fc21940>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus']=False #用来正常显示负号\n",
    "\n",
    "def f1(s):\n",
    "    a=max(0,1-s)\n",
    "    return a**2\n",
    "\n",
    "def f2(s):\n",
    "    if s>0:\n",
    "        return 0\n",
    "    else:\n",
    "        return 1\n",
    "    \n",
    "x=np.linspace(-2,2,500)\n",
    "y1=[f1(i) for i in x]\n",
    "y2=[f2(i) for i in x]\n",
    "\n",
    "plt.plot(x,y1,label=\"(max(0,1-s))**2\")\n",
    "plt.plot(x,y2,label=\"[sign(s)!=1]\")\n",
    "plt.legend()\n",
    "plt.title('Ein的比较')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(c)回顾Problem 1.5的更新规则\n",
    "$$\n",
    "s(t) = w^T(t)x(t),当y(t) · s(t) \\le 1时\n",
    "\\\\w(t + 1) = w(t) + \\eta (y(t)-s(t)).x(t)\n",
    "$$\n",
    "再来看下我们的梯度，稍微做下变形\n",
    "$$\n",
    "(1 - y_nw^Tx_n)(-y_nx_n)=-(y_n-w^Tx_n)x_n\n",
    "\\\\\\nabla E_n (w) =\\begin{cases}\n",
    "-(y_n-w^Tx_n)x_n\\qquad\\ \\ \\ \\ (y_nw^Tx_n\\le1)\n",
    "\\\\0 \\qquad\\qquad\\qquad\\qquad(y_nw^Tx_n>1)\n",
    "\\end{cases}\n",
    "$$\n",
    "所以随机梯度下降法的更新规则为\n",
    "$$\n",
    "w(t + 1) \n",
    "= w(t) -\\eta\\nabla E_n (w) \n",
    "=\\begin{cases}\n",
    "w(t)+\\eta(y_n-w(t)^Tx_n)x_n\\qquad\\ \\ \\ (y_nw(t)^Tx_n\\le1)\n",
    "\\\\w(t) \\qquad\\qquad\\qquad\\qquad\\qquad(y_nw(t)^Tx_n>1)\n",
    "\\end{cases}\n",
    "$$\n",
    "我们使用Problem 1.5一样的符号$s(t) = w^T(t)x(t)$，那么随机梯度下降法的更新规则即为Problem 1.5的更新规则"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 3.5 (Page 110)\n",
    "\n",
    "(a) Consider\n",
    "$$\n",
    "E_n (w) = \\max(0, 1 - y_nw^Tx_n)\n",
    "$$\n",
    "Show that $E_n (w)$ is continuous and differentiable except when $y_n = w^Tx_n$ . \n",
    "\n",
    "(b) Show that $E_n(w)$ is an upper bound for $[\\![sign(w^Tx_n) \\ne y_n]\\!]$. Hence, $\\frac 1N \\sum_{n=1}^N E_n (w) $is an upper bound for the in sample classification error $E_{in} (w)$ . \n",
    "\n",
    "(c) Apply stochastic gradient descent on $\\frac 1N \\sum_{n=1}^N E_n (w) $(ignoring the singular case of $y_n = w^Tx_n$) and derive a new perceptron learning algorithm.    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)我们用上一题一样的思路，令$s= y_nw^Tx_n$，$f(s)=max(0,1-s)$关于$s$连续,$s$关于$w$连续，因此$E_n (w)=f(s(w))$关于$w$连续。\n",
    "\n",
    "$s$关于$w$处处可导，但$f(s)=max(0,1-s)$在$s=1$处不可导，其余点均可导。我们来看下$s=1$的特点，注意$y_n\\in\\{1,-1\\}$，那么\n",
    "$$\n",
    "s=1\\Leftrightarrow\n",
    "\\\\y_nw^Tx_n=1\\Leftrightarrow\n",
    "\\\\y_n\\times y_nw^Tx_n=y_n\\Leftrightarrow\n",
    "\\\\w^Tx_n=y_n\n",
    "$$\n",
    "所以$E_n (w)=f(s(w))$在$s=1$即$y_n = w^Tx_n$处不可导，其余点均可导\n",
    "\n",
    "(b)同Problem 3.4方法，$s= y_nw^Tx_n$\n",
    "$$\n",
    "E_n (w) = \\max(0, 1 - y_nw^Tx_n)=max(0,1-s)\n",
    "\\\\ [\\![sign(s) \\ne 1]\\!]\n",
    "$$\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x29693eba7f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus']=False #用来正常显示负号\n",
    "\n",
    "def f1(s):\n",
    "    a=max(0,1-s)\n",
    "    return a\n",
    "\n",
    "def f2(s):\n",
    "    if s>0:\n",
    "        return 0\n",
    "    else:\n",
    "        return 1\n",
    "    \n",
    "x=np.linspace(-2,2,500)\n",
    "y1=[f1(i) for i in x]\n",
    "y2=[f2(i) for i in x]\n",
    "\n",
    "plt.plot(x,y1,label=\"max(0,1-s)\")\n",
    "plt.plot(x,y2,label=\"[sign(s)!=1]\")\n",
    "plt.legend()\n",
    "plt.title('Ein的比较')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(c)不管不可导点，我们来求梯度，只考虑$ y_nw^Tx_n<1$的情形，此时\n",
    "$$\n",
    "E_n (w) = 1 - y_nw^Tx_n\n",
    "\\\\\\frac{\\partial E_n (w) }{\\partial w_i}\n",
    "=\\frac{\\partial (1 - y_nw^Tx_n) }{\\partial w_i}=-y_nx_n^i\n",
    "$$\n",
    "所以\n",
    "$$\n",
    "当y_nw^Tx_n<1时，\\nabla E_n (w)=-y_nx_n\n",
    "\\\\当y_nw^Tx_n\\ge1时，\\nabla E_n (w)=0\n",
    "$$\n",
    "所以SGD（随机梯度下降法）的更新规则为\n",
    "$$\n",
    "当y_nw(t)^Tx_n<1时\n",
    "\\\\w(t+1)=w(t)-\\eta\\nabla E_n (w)=w(t)+\\eta y_nx_n\n",
    "\\\\当y_nw(t)^Tx_n\\ge1时不更新\n",
    "$$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "#### Problem 3.6 (Page 110)\n",
    "\n",
    "Derive a linear programming algorithm to fit a linear model for classification using the following steps. A linear program is an optimization problem of the following form: \n",
    "$$\n",
    "\\underset {z}{min}\\quad {c^Tz}\n",
    "\\\\subject\\ to\\quad Az\\le b\n",
    "$$\n",
    "$A$, $b$ and $c$ are parameters of the linear program and $z$ is the optimization variable. This is such a well studied optimization problem that most mathematics software have canned optimization functions which solve linear programs.\n",
    "\n",
    "(a) For linearly separable data,show that for some $w$, $y_n (w^Tx_n) \\ge1$ for $n = 1, . . . , N$.    \n",
    "\n",
    "(b) Formulate the task of finding a separating $w$ for separable data as a linear program. You need to specify what the parameters $A, b, c$ are and what the optimization variable $z$ is.    \n",
    "\n",
    "(c) If the data is not separable, the condition in (a) cannot hold for every $n$. Thus introduce the violation $\\xi_n\\ge0$ to capture the amount of violation for example $x_n$. So, for $n = 1, . . . , N$,    \n",
    "$$\n",
    "y_n (w^Tx_n) \\ge1-\\xi_n\n",
    "\\\\ \\xi_n\\ge0\n",
    "$$\n",
    "Naturally, we would like to minimize the amount of violation. One intuitive a pproach is to minimize $\\sum_{n=1}^{N}\\xi_n$, i .e., we want $w$ that solves    \n",
    "$$\n",
    "min_{w,\\xi_n}\\quad\\sum_{n=1}^{N}\\xi_n\n",
    "\\\\subject\\ to\\quad y_n (w^Tx_n) \\ge1-\\xi_n\n",
    "\\\\\\xi_n\\ge0\n",
    "$$\n",
    "where the inequalities must hold for $n = 1 , . . . , N$. Formulate this problem as a linear program .    \n",
    "\n",
    "(d) Argue that the linear program you derived in (c) and the optimization problem in Problem 3.5 are equivalent. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这题的任务是要把我们之前讨论的线性分类问题转化为线性规划问题。\n",
    "\n",
    "(a)由第一章的结论，对于线性可分的数据，存在$w_1$，使得$y_n w_1^Tx_n>0(n = 1, . . . , N)$，设$\\rho =min_{1\\le n\\le N}y_nw_1^Tx_n$，显然$\\rho>0$，现在取$w=\\frac {w_1} \\rho$，那么\n",
    "$$\n",
    "y_n w^Tx_n=y_n ({\\frac{w_1}{\\rho}})^Tx_n=\\frac { y_nw_1^Tx_n}{\\rho}\\ge1\n",
    "$$\n",
    "因此结论成立"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(b)这题的限制条件就是刚刚所说的$y_n w^Tx_n\\ge1$，因此$z=w$，比较让人费解的是$c$应该取什么，实际上思考下，我们这里只要找到满足$y_n w^Tx_n\\ge1,n = 1, . . . , N$这个条件的$w$即可，所以这里$c$可以取任意值。结合以上几点，下面把$A, b, c$分别写出，不妨设$w,x_n\\in R^d,n = 1, . . . , N$。\n",
    "\n",
    "$$    \n",
    "z=w=(w_1,...w_d)^T\\\\\n",
    "x_n=(x_{n}^1,...x_n^d)^T\\\\\n",
    "A=\\left(\n",
    " \\begin{matrix}\n",
    " -y_1x_1^T\\\\\n",
    " ... \\\\\n",
    " -y_Nx_N^T\n",
    "  \\end{matrix}\n",
    " \\right)\n",
    "=\n",
    "\\left(\n",
    " \\begin{matrix}\n",
    "   -y_1x_1^1 &   ... & -y_1x_1^d  \\\\\n",
    "   ... &   ... &    ... \\\\\n",
    " -y_Nx_N^1 &   ... & -y_Nx_N^d\n",
    "  \\end{matrix}\n",
    "  \\right)\n",
    "  \\in R^{N\\times d} \\\\\n",
    "  b= \\left(  \\begin{matrix}  -1\\\\ \n",
    "  ...\\\\ \n",
    "  -1\n",
    "   \\end{matrix}\n",
    "  \\right)\\in R^N\\\\\n",
    "  c为R^d中任意向量   \n",
    "$$\n",
    "\n",
    "我们看下这里的$Az,b$\n",
    "\n",
    "$$\n",
    "Az=\\left(\n",
    " \\begin{matrix}\n",
    " -y_1x_1^T\\\\\n",
    " ...\\\\\n",
    " -y_Nx_N^T\n",
    "  \\end{matrix}\n",
    " \\right)\n",
    "w=\n",
    "\\left(\n",
    " \\begin{matrix}\n",
    " -y_1x_1^Tw\\\\\n",
    " ...\\\\\n",
    " -y_Nx_N^Tw\n",
    "  \\end{matrix}\n",
    " \\right)\n",
    " =\n",
    " \\left(\n",
    " \\begin{matrix}\n",
    " -y_1w^Tx_1\\\\\n",
    " ...\\\\\n",
    " -y_Nw^Tx_N\n",
    "  \\end{matrix}\n",
    " \\right)\n",
    " \\\\b= \\left(  \\begin{matrix}\n",
    "  -1\\\\\n",
    "  ...\\\\\n",
    "  -1\n",
    "   \\end{matrix}\n",
    "  \\right)\n",
    "$$\n",
    "因此$Az\\le b$即为$y_nw^Tx_n\\ge1$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(c)依旧设$w,x_n\\in R^d,n = 1, . . . , N$，和上一题类似的思路\n",
    "$$\n",
    "z=(w_1,..w_d,\\xi_1,...,\\xi_N)^T\\in{R^{N+d}}\\\\\n",
    "记A_1=\\left(\n",
    " \\begin{matrix}\n",
    " -y_1x_1^T \n",
    " \\\\\n",
    " ...\\\\\n",
    " -y_Nx_N^T\n",
    "  \\end{matrix}\n",
    " \\right)\\in R^{N\\times d},I_{N\\times N}为N\\times N阶单位矩阵\\\\\n",
    " A2=\\left(\n",
    "\t\\begin{array}{c|c}\n",
    "\tA_1& -I_{N\\times N}\\\\\n",
    "\t\\end{array}\n",
    "\t\\right)\\in R^{N\\times(N+d)}\\\\\n",
    "A3=\\left(\n",
    "\t\\begin{array}{c|c}\n",
    "\t0& -I_{N\\times N}\\\\\n",
    "\t\\end{array}\n",
    "\t\\right)\\in R^{N\\times(N+d)}(0为N\\times d阶0矩阵)\\\\\n",
    "A=\\left(\n",
    "\t\\begin{matrix}\n",
    "\tA1 \\\\ \n",
    "\tA2\n",
    "\t\\end{matrix}\n",
    "\t\\right)\\in R^{(2N)\\times (N+d)}\n",
    "  \\\\b= (-1...-1,0...0)^T\\in R^{2N}，其中前N个分量为-1，其余为0\\\\\n",
    "  c=(0,..0,1,...1)^T\\in R^{N+d}，其中c的前d个分量为0，后N的分量为1\n",
    "$$\n",
    "同上一题的验证方法可以知此问题即为原来的问题。\n",
    "\n",
    "(d)回顾下3.5\n",
    "$$\n",
    "E_n (w) = \\max(0, 1 - y_nw^Tx_n)\n",
    "$$\n",
    "我们的目标是最小化$\\frac 1N \\sum_{n=1}^N E_n (w)  $\n",
    "\n",
    "这里我们令$\\xi _n=E_n (w) = \\max(0, 1 - y_nw^Tx_n)$，那么\n",
    "$$\n",
    "1 - y_nw^Tx_n\\le \\xi_n\\\\\n",
    "0\\le\\xi_n\\\\\n",
    "\\frac 1N \\sum_{n=1}^N E_n (w)  =\\frac 1N\\sum_{n=1}^{N}\\xi_n\n",
    "$$\n",
    "注意$N$为常数，所以3.5即为\n",
    "$$\n",
    "在条件1 - y_nw^Tx_n\\le \\xi_n和0\\le\\xi_n下最小化\\\\\\sum_{n=1}^{N}\\xi_n\n",
    "$$\n",
    "这就是我们刚刚考虑的问题。其实这就是著名的支持向量机算法（SVM）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 3.7 (Page 111) \n",
    "\n",
    "Use the linear programming algorithm from Problem 3.6 on the learning task in Problem 3.1 for the separable ($sep = 5$) and the non separable ($sep = -5$) cases. Compare your results to the linear regression approach with and without the 3rd order polynomial feature transform.   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这题的意思是使用线性规划方法对3.1再实践一遍，这里遇到个坑，一开始使用scipy的linprog函数做优化，发现一直显示无解，后来网上一查发现有人说这个函数如果数据量大于100就会求不出解，然后我将我的数据量由1000改为50，果然一下有解了，最后的解决方法是cvxopt包，这个包的效果非常好。后面记第一个算法为算法1，第二个算法为算法2,分别给出结果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "#参数\n",
    "rad=10\n",
    "thk=5\n",
    "sep=5\n",
    "\n",
    "#n为产生点的个数,x1,y1为上半个圆环的坐标\n",
    "def generatedata(rad,thk,sep,n,x1=0,y1=0):\n",
    "    #上半个圆的圆心\n",
    "    X1=x1\n",
    "    Y1=y1\n",
    "\n",
    "    #下半个圆的圆心\n",
    "    X2=X1+rad+thk/2\n",
    "    Y2=Y1-sep\n",
    "    \n",
    "    #上半个圆环的点\n",
    "    top=[]\n",
    "    #下半个圆环的点\n",
    "    bottom=[]\n",
    "    \n",
    "    #后面要用到的参数\n",
    "    r1=rad+thk\n",
    "    r2=rad\n",
    "    \n",
    "    cnt=1\n",
    "    while(cnt<=n):\n",
    "        #产生均匀分布的点\n",
    "        x=np.random.uniform(-r1,r1)\n",
    "        y=np.random.uniform(-r1,r1)\n",
    "        \n",
    "        d=x**2+y**2\n",
    "        if(d>=r2**2 and d<=r1**2):\n",
    "            if (y>0):\n",
    "                top.append([X1+x,Y1+y])\n",
    "                cnt+=1\n",
    "            else:\n",
    "                bottom.append([X2+x,Y2+y])\n",
    "                cnt+=1\n",
    "        else:\n",
    "            continue\n",
    "\n",
    "    return top,bottom"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "作图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ecdaaa5748>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "n=1000\n",
    "top,bottom=generatedata(rad,thk,sep,n)\n",
    "\n",
    "X1=[i[0] for i in top]\n",
    "Y1=[i[1] for i in top]\n",
    "\n",
    "X2=[i[0] for i in bottom]\n",
    "Y2=[i[1] for i in bottom]\n",
    "\n",
    "plt.scatter(X1,Y1,s=1)\n",
    "plt.scatter(X2,Y2,s=1)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(1)特征转换之前，算法1，sep=5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     pcost       dcost       gap    pres   dres   k/t\n",
      " 0:  3.0133e-01  1.0016e+03  2e+03  2e+00  7e+03  1e+00\n",
      " 1:  2.9917e+01  4.8276e+04  9e+06  9e+01  3e+05  2e+02\n",
      " 2:  6.1117e-01  4.3696e+02  6e+02  7e-01  3e+03  5e+01\n",
      " 3:  7.9437e-01  5.2302e+02  1e+03  9e-01  3e+03  6e+01\n",
      " 4:  1.8369e+00  7.0321e+01  1e+02  7e-02  3e+02  3e+01\n",
      " 5:  1.8318e+00  3.3501e+00  4e+00  2e-03  8e+00  4e-01\n",
      " 6:  1.4266e+00  1.9433e+00  1e+00  7e-04  3e+00  1e-01\n",
      " 7:  1.4291e+00  1.8611e+00  1e+00  6e-04  2e+00  1e-01\n",
      " 8:  1.3934e+00  1.5405e+00  3e-01  2e-04  8e-01  3e-02\n",
      " 9:  1.3881e+00  1.4650e+00  2e-01  1e-04  5e-01  1e-02\n",
      "10:  1.3829e+00  1.3850e+00  6e-03  4e-06  1e-02  2e-04\n",
      "11:  1.3827e+00  1.3827e+00  6e-05  4e-08  1e-04  2e-06\n",
      "12:  1.3827e+00  1.3827e+00  6e-07  4e-10  1e-06  2e-08\n",
      "13:  1.3827e+00  1.3827e+00  6e-09  4e-12  1e-08  2e-10\n",
      "Optimal solution found.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ecde7a6668>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.9826141306811725, 0.0007542102316126465, 0.39934445503821364]\n"
     ]
    }
   ],
   "source": [
    "from cvxopt import matrix, solvers\n",
    "\n",
    "#加上偏移项\n",
    "x1=[[1]+i for i in top]\n",
    "x2=[[1]+i for i in bottom]\n",
    "\n",
    "c=np.array([1.0,1.0,1.0])\n",
    "A=np.concatenate((np.array(x1),np.array(x2)*(-1)))*(-1)\n",
    "b=np.ones(n)*(-1.0)\n",
    "\n",
    "c=matrix(c)\n",
    "A=matrix(A)\n",
    "b=matrix(b)\n",
    "\n",
    "sol = solvers.lp(c,A,b)\n",
    "\n",
    "w=list((sol['x']))\n",
    "\n",
    "#作图\n",
    "r=2*(rad+thk)\n",
    "X3=[-r,r]\n",
    "Y3=[-(w[0]+w[1]*i)/w[2] for i in X3]\n",
    "\n",
    "plt.scatter(X1,Y1,s=1)\n",
    "plt.scatter(X2,Y2,s=1)\n",
    "plt.plot(X3,Y3)\n",
    "plt.title('sep=5,algorithm1')\n",
    "plt.show()\n",
    "print(w)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到线性规划产生的直线比感知机的结果更好一些，因为离两组数据更远。\n",
    "\n",
    "(2)特征转换之前，算法2，sep=5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     pcost       dcost       gap    pres   dres   k/t\n",
      " 0:  5.9187e+01  1.2658e+03  5e+03  2e+00  5e+02  1e+00\n",
      " 1:  9.6869e+01  2.5471e+02  4e+02  3e-01  6e+01  1e+00\n",
      " 2:  6.5506e+01  1.4718e+02  2e+02  1e-01  3e+01  7e-01\n",
      " 3:  4.7019e+01  9.9537e+01  2e+02  9e-02  2e+01  4e-01\n",
      " 4:  3.5215e+01  7.3439e+01  1e+02  6e-02  2e+01  3e-01\n",
      " 5:  2.6599e+01  5.4888e+01  1e+02  5e-02  1e+01  2e-01\n",
      " 6:  1.9412e+01  3.9803e+01  8e+01  3e-02  8e+00  2e-01\n",
      " 7:  1.3697e+01  2.7965e+01  6e+01  2e-02  6e+00  1e-01\n",
      " 8:  9.9267e+00  2.0330e+01  4e+01  2e-02  4e+00  7e-02\n",
      " 9:  7.3586e+00  1.5211e+01  3e+01  1e-02  3e+00  4e-02\n",
      "10:  3.8519e+00  7.7915e+00  2e+01  7e-03  2e+00  8e-03\n",
      "11:  1.1403e+00  2.3409e+00  5e+00  2e-03  5e-01  3e-03\n",
      "12:  3.3103e-02  6.8245e-02  2e-01  6e-05  1e-02  7e-05\n",
      "13:  3.3161e-04  6.8366e-04  2e-03  6e-07  1e-04  7e-07\n",
      "14:  3.3161e-06  6.8366e-06  2e-05  6e-09  1e-06  7e-09\n",
      "15:  3.3161e-08  6.8366e-08  2e-07  6e-11  1e-08  7e-11\n",
      "16:  3.3161e-10  6.8366e-10  2e-09  6e-13  1e-10  7e-13\n",
      "Optimal solution found.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ecde59b898>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#根据之前所述构造矩阵\n",
    "a1=np.concatenate((A,(-1)*np.eye(n)),axis=1)\n",
    "a2=np.concatenate((np.zeros([n,3]),(-1)*np.eye(n)),axis=1)\n",
    "\n",
    "A1=np.concatenate((a1,a2))\n",
    "c1=np.array([0.0]*3+[1.0]*1000)\n",
    "b1=np.array([-1.0]*1000+[0.0]*1000)\n",
    "\n",
    "#带入算法求解\n",
    "c1=matrix(c1)\n",
    "A1=matrix(A1)\n",
    "b1=matrix(b1)\n",
    "\n",
    "sol1 = solvers.lp(c1,A1,b1)\n",
    "\n",
    "#作图\n",
    "w=list((sol1['x']))\n",
    "#作图\n",
    "r=2*(rad+thk)\n",
    "X3=[-r,r]\n",
    "Y3=[-(w[0]+w[1]*i)/w[2] for i in X3]\n",
    "\n",
    "plt.scatter(X1,Y1,s=1)\n",
    "plt.scatter(X2,Y2,s=1)\n",
    "plt.plot(X3,Y3)\n",
    "plt.title('sep=5,algorithm2')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(3)特征转换之前，算法1，sep=-5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     pcost       dcost       gap    pres   dres   k/t\n",
      " 0: -2.8054e-02  1.0019e+03  2e+03  2e+00  5e+03  1e+00\n",
      " 1: -2.3018e+00  6.2068e+04  1e+07  2e+02  3e+05  3e+02\n",
      " 2: -9.6404e-02  9.2573e+02  2e+03  2e+00  4e+03  1e+02\n",
      " 3: -1.8134e-01  1.0723e+03  3e+03  2e+00  4e+03  2e+02\n",
      " 4: -6.7500e-01  1.7910e+03  8e+03  3e+00  6e+03  5e+02\n",
      " 5: -5.9176e-01  1.9644e+03  9e+03  3e+00  6e+03  7e+02\n",
      " 6: -1.9019e+00  7.0119e+03  4e+04  5e+00  1e+04  5e+03\n",
      " 7: -1.5197e+00  8.6818e+03  5e+04  5e+00  1e+04  7e+03\n",
      " 8: -2.0117e+00  1.5067e+05  6e+05  5e+00  1e+04  1e+05\n",
      " 9: -2.0611e+00  1.5086e+07  6e+07  5e+00  1e+04  2e+07\n",
      "10: -2.0611e+00  1.5087e+09  6e+09  5e+00  1e+04  2e+09\n",
      "11: -2.0611e+00  1.5087e+11  6e+11  5e+00  1e+04  2e+11\n",
      "Certificate of primal infeasibility found.\n"
     ]
    }
   ],
   "source": [
    "sep=-5\n",
    "top,bottom=generatedata(rad,thk,sep,n)\n",
    "\n",
    "X1=[i[0] for i in top]\n",
    "Y1=[i[1] for i in top]\n",
    "\n",
    "X2=[i[0] for i in bottom]\n",
    "Y2=[i[1] for i in bottom]\n",
    "\n",
    "#加上偏移项\n",
    "x1=[[1]+i for i in top]\n",
    "x2=[[1]+i for i in bottom]\n",
    "\n",
    "c=np.array([1.0,1.0,1.0])\n",
    "A=np.concatenate((np.array(x1),np.array(x2)*(-1)))*(-1)\n",
    "b=np.ones(n)*(-1.0)\n",
    "\n",
    "c=matrix(c)\n",
    "A=matrix(A)\n",
    "b=matrix(b)\n",
    "\n",
    "sol = solvers.lp(c,A,b)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "此时无解，因为不可分。\n",
    "\n",
    "(4)特征转换之前，算法2，sep=-5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     pcost       dcost       gap    pres   dres   k/t\n",
      " 0:  5.9187e+01  1.2658e+03  5e+03  2e+00  5e+02  1e+00\n",
      " 1:  9.6869e+01  2.5471e+02  4e+02  3e-01  6e+01  1e+00\n",
      " 2:  6.5506e+01  1.4718e+02  2e+02  1e-01  3e+01  7e-01\n",
      " 3:  4.7019e+01  9.9537e+01  2e+02  9e-02  2e+01  4e-01\n",
      " 4:  3.5215e+01  7.3439e+01  1e+02  6e-02  2e+01  3e-01\n",
      " 5:  2.6599e+01  5.4888e+01  1e+02  5e-02  1e+01  2e-01\n",
      " 6:  1.9412e+01  3.9803e+01  8e+01  3e-02  8e+00  2e-01\n",
      " 7:  1.3697e+01  2.7965e+01  6e+01  2e-02  6e+00  1e-01\n",
      " 8:  9.9267e+00  2.0330e+01  4e+01  2e-02  4e+00  7e-02\n",
      " 9:  7.3586e+00  1.5211e+01  3e+01  1e-02  3e+00  4e-02\n",
      "10:  3.8519e+00  7.7915e+00  2e+01  7e-03  2e+00  8e-03\n",
      "11:  1.1403e+00  2.3409e+00  5e+00  2e-03  5e-01  3e-03\n",
      "12:  3.3103e-02  6.8245e-02  2e-01  6e-05  1e-02  7e-05\n",
      "13:  3.3161e-04  6.8366e-04  2e-03  6e-07  1e-04  7e-07\n",
      "14:  3.3161e-06  6.8366e-06  2e-05  6e-09  1e-06  7e-09\n",
      "15:  3.3161e-08  6.8366e-08  2e-07  6e-11  1e-08  7e-11\n",
      "16:  3.3161e-10  6.8366e-10  2e-09  6e-13  1e-10  7e-13\n",
      "Optimal solution found.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ecde6a4898>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#根据之前所述构造矩阵\n",
    "a1=np.concatenate((A,(-1)*np.eye(n)),axis=1)\n",
    "a2=np.concatenate((np.zeros([n,3]),(-1)*np.eye(n)),axis=1)\n",
    "\n",
    "A1=np.concatenate((a1,a2))\n",
    "c1=np.array([0.0]*3+[1.0]*1000)\n",
    "b1=np.array([-1.0]*1000+[0.0]*1000)\n",
    "\n",
    "#带入算法求解\n",
    "c1=matrix(c1)\n",
    "A1=matrix(A1)\n",
    "b1=matrix(b1)\n",
    "\n",
    "sol1 = solvers.lp(c1,A1,b1)\n",
    "\n",
    "#作图\n",
    "w=list((sol1['x']))\n",
    "#作图\n",
    "r=2*(rad+thk)\n",
    "X3=[-r,r]\n",
    "Y3=[-(w[0]+w[1]*i)/w[2] for i in X3]\n",
    "\n",
    "plt.scatter(X1,Y1,s=1)\n",
    "plt.scatter(X2,Y2,s=1)\n",
    "plt.plot(X3,Y3)\n",
    "plt.title('sep=-5,algorithm2')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第二种算法没有要求可分，所以是有解的。\n",
    "\n",
    "(5)特征转换后，算法1，sep=-5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     pcost       dcost       gap    pres   dres   k/t\n",
      " 0:  2.3620e-01  1.0116e+03  2e+03  2e+00  1e+06  1e+00\n",
      " 1:  2.9224e+01  2.3607e+04  4e+06  4e+01  3e+07  2e+02\n",
      " 2:  3.8486e+01  3.7031e+03  6e+05  6e+00  4e+06  2e+00\n",
      " 3: -9.9194e-02  2.7886e+01  3e+01  4e-02  3e+04  1e+00\n",
      " 4: -5.3991e-01  2.4845e+01  4e+01  4e-02  3e+04  2e+00\n",
      " 5: -8.4799e-01  2.8108e+01  7e+01  4e-02  3e+04  2e+00\n",
      " 6: -8.3387e+00  2.8715e+01  4e+02  4e-02  3e+04  9e+00\n",
      " 7: -8.7869e+02  3.8457e+01  5e+04  6e-02  5e+04  9e+02\n",
      " 8: -8.7920e+04  3.8459e+01  5e+06  6e-02  5e+04  9e+04\n",
      " 9: -8.7921e+06  3.8459e+01  5e+08  6e-02  5e+04  9e+06\n",
      "10: -8.7921e+08  3.8459e+01  5e+10  6e-02  5e+04  9e+08\n",
      "Certificate of dual infeasibility found.\n"
     ]
    }
   ],
   "source": [
    "#data形式为[  1.        ,   3.05543009,  -3.72519952,  -1.        ]\n",
    "#特征转换\n",
    "def transform(data):\n",
    "    result=[]\n",
    "    for i in data:\n",
    "        x1=i[1]\n",
    "        x2=i[2]\n",
    "        flag=i[-1]\n",
    "        x=np.array([1,x1,x2,x1*x2,x1**2,x2**2,x1**3,(x1**2)*x2,x1*(x2**2),x2**3,flag])\n",
    "        result.append(x)\n",
    "    return result\n",
    "\n",
    "#对数据预处理，加上标签和偏移项1\n",
    "x1=[[1]+i+[1] for i in top]\n",
    "x2=[[1]+i+[-1] for i in bottom]\n",
    "data=x1+x2\n",
    "newdata=transform(data)\n",
    "\n",
    "finaldata=[]\n",
    "for i in newdata:\n",
    "    temp=list(i[:-1]*i[-1])\n",
    "    finaldata.append(temp)\n",
    "    \n",
    "c=np.array([1.0]*10)\n",
    "A=np.array(finaldata)*(-1)\n",
    "b=np.ones(n)*(-1.0)\n",
    "\n",
    "c=matrix(c)\n",
    "A=matrix(A)\n",
    "b=matrix(b)\n",
    "\n",
    "sol = solvers.lp(c,A,b)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接着作图看下，利用之前等高线的方法。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEICAYAAABcVE8dAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzsnXecVNX1wL+XssguiiysKL2tKKAi\nLogIIkVUxBbFWDDYghoLlihijLFiS1D0FxU0GiJWYkNjoQgoIOKixChtWcBQFJddNLCLDuX+/jhz\nZ968fVOWnd03M3u/n898pr1y3sx755537ilKa43FYrFYMp96fgtgsVgsltrBKnyLxWKpI1iFb7FY\nLHUEq/AtFouljmAVvsVisdQRrMK3WCyWOoJV+D6hlOqqlPpSKbVdKXW93/KkKkqplkqpj4O/01/8\nlidTUEqdqJTaWIPb36GU6hTj+/VKqaE1tX+LN1bh+8etwDyt9f5a68f3dSNKqXlKqSuSKJfXPrRS\nqktN7iMGY4CtwAFa65t9kiFlCCrKnUGFukMpNdNvmbzQWjfRWq8FUEr9XSl1X03tSynVQyn1oVJq\nq1LKJhbFwCp8/2gPfOO3EEqpBqmwjRi0B5brfcgQrGG5/OT0oEJtorUe5rcwTnz6zXcBrwGX+7Dv\n9EJrbR+1/AA+AvYAPwM7gK7An4H/AluAp4HGwWWbAe8CJcC24Os2we/ud23n/4AOgAYaOPY3D7gi\n+PoSYCHwKFAG3Bf8/DJgRXAfHwLtg59/HNxeeXAfvwZOBDYC44DvgRdiyemQ4d7gvrcDM4EWwe/2\nA6YBpcCPwOdAS+DvyMUcCO57KNAIeAzYHHw8BjQKbsdLLvPZrcAPwHfAWcBwYHXwN7g9xn91CbA2\nKPM64CLHd56/WfA7DVwfXHcr8AhQLwnnznpgaILLXhqUb3tQjisd350IbHS87wV8GVx2OvCqOTeC\n3/8WWBP8vWYArVzHeg1QBKxzfNYFuUNz/ofvOI7j98BXwE/B/e3n+h+r9J8F96f9vr5T+eG7AHX1\nQaQSfix4EeUC+wPvAA8Ev2sOnANkB7+bDrzltZ3g+w7EV/i7geuABkDj4MW0Bjg8+NkdwCLH+hro\n4nh/YnAbDyEKuHGCchYDhwaXnwc8GPzuyuAxZwP1gWMQFw6I0ncqnnuAxcBBQB6wCLg3hlzmszuB\nhojiKgFeCsrZHRkwO3n8RznA/4CuwfeHAN2DrxP5zeYG/9N2iKIy/0F/ZGCL9ugf47xZjxgFJcig\neVSMZU8DOgMKGAhUAL0cv9XG4Oss4FtgbPA3+hWioI0xMBgZtHoFf9cngI9dxzoreKyNHZ918foP\nHcexBGgVXG8FcJXrf6zSf4ZV+PH1jt8C1NUHQSUcvBjLgc6O744jaCl5rNcT2ObejuN9B+Ir/P+6\ntvk+cLnjfb2gcmgffO+l8AMELbIqyHmH4/3vgA+Cry9DFPeRHtuJUBbIoDHc8f5kYH00uYKf7QTq\nB9/vHzyeYx3LLAXO8th3DqKAzzGKrIq/2Smu452ThPPmeGQgywbGI3cyBya47lvAWMfvYhT+CcAm\nQDmWXUBY4f8NeNjxXRPEau/gONbBrn0lovBHOd4/DDxdnf8Mq/DjPqwP33/ykIt3qVLqR6XUj8AH\nwc9RSmUrpSYrpb5VSv0PcbEcqJSqX419bnC9bw9Mcuy/DBmIWsfYRonW+mfzJkE5v3e8rkAUB4jr\n5UPgFaXUZqXUw0qphlH22wqxRg3fBj/zlCtIqdZ6T/D1zuDzFsf3Ox2yhNBalyMurKuA75RS/1JK\nHRb8OpHfzPk7u+WMi1LqG8fk7ICgTAu11ju11hVa6weQAWlAlPVPVUotVkqVBWUcDrTwWLQVsEkH\ntaaH7BG/udZ6B+J+i3asiRLtfIB9/M8ssbEK33+2Iidvd631gcFHU621OZlvRnz8x2qtD0CsMRDl\nAmL5OCkPPmc7PjvYtYx7nQ2If/dAx6Ox1npRDLnd24gnZ/QNab1La3231rob0A8YAfwmyuKbEWVr\naBf8LJpc1UJr/aHW+iTEnbMSeCb4VSK/WVsvOZVSAxyK3OthlHt3HZ6c/SSaiHj8xkqpRsDryNxQ\nS631gcB7XssiPvLWSinnd07ZI35zpVQO4sLb5JIjGkn9Tyz7jlX4PqO13osokUeVUgcBKKVaK6VO\nDi6yPzIg/KiUygX+5NrEFqCTY3slyIU4SilVXyl1GeLHjcXTwHilVPfg/psqpUZG20cU4skZFaXU\nIKXUEcG7gf8h7oI9URZ/GbhDKZWnlGqB+HmnJbqvBGQ50YT2BXMAzggquF+QSUcjV7zfDOAWpVQz\npVRbxD/+KoDW+hOHIvd6eCp3pVQ7pdTxSqkspdR+SqlbEIt9oVt2xC/fCPF971ZKnQpEi+j5NHhc\n1yqlGiilzgT6OL5/CbhUKdUzOJBMAD7TWq+P93sGSeT82WeUsB9yzAR/m0Y1tb90xir81GAcMgG4\nOOgOmY1YyyATuo2RO4HFiLvHySTgXKXUNqWUief/LXALctvdHfGPR0Vr/SYy0flKcP9fA6c6FrkL\nmBp0X5wXZTPx5IzFwcA/EWW/AphPdCV+H1CIRHf8B/gi+FmyaIsoQJDr42bEwi1DJj5/Bwn9ZgBv\nI77mZcC/EF94ddgfeAqJCtoEnAKcqrUudcuutd6ORAm9Flz+QiQwoBJa6wAyUXs54iIahURZ/RL8\nfg7wR+SO4TvEgDi/CnL/DegWPH/eqsJ6idIeMTZMmPNOYFUN7CftUZFuO4ulbqOUehaYrrX+sJrb\n0UC+1npNciRLaJ9JkT24rc+QSdTnqy+ZJVWwCt9iqQH8UPjVQSk1ELGKtwIXIS6rTlrr73wVzJJU\nMjUT0WKxVI2uiPunCRL6eq5V9pmHtfAtFouljmAnbS0Wi6WOkFIunRYtWugOHTr4LYbFUrts3gwl\nJdCqFeTl+S2NJQ1ZunTpVq113JMnpRR+hw4dKCws9FsMi6V2+fJLuOEG+PhjaNoUHnsMBg/2WypL\nGqGU+jb+UtalY7H4z9FHw7x58NprsH07DBkCZ50FRUV+S2bJMKzCt1hSAaVg5EhYsQImTIA5c6B7\nd7jpJti2zW/pLBmCVfgWSyqx334wfrxY96NHi3unSxd44gnYtctv6SxpjlX4FksqcvDB8Mwz4t8/\n+mi4/no44gh45x2wodSWfcQqfIsllTnqKJg1C2YEy+CccQYMHQrLlvkrlyUtsQrfYkl1lILTT4f/\n/Acefxz+/W/o1Qsuu0xCOi2WBLEK32JJFxo2hOuugzVrZDL3xRchPx/uvhvKy+Ovb6nzWIVvsaQb\nBx4If/6zRPQMHw533SWK//nnYU+0NgIWi1X4Fkv60qkTTJ8OCxZAu3bi4ikogI8+8lsyS4piFb7F\nku4cfzx8+im8/LLE7A8ZIpO7q2wPEEskVuFbLJmAUnD++bByJTz4oGTudu8uPv+tW/2WzpIiWIVv\nsWQS++0H48bJxO5vfwtPPimJWxMnQiDgt3QWn7EK32LJRA46CJ56Cr76Cvr2hZtvhm7d4K23bOJW\nHcYqfIslk+neHT74AN5/Hxo1grPPlkqcNnGrTmIVvsVSFzjlFEnY+utfJYGrVy9x+WzZ4rdkllrE\nKnyLpa7QoAH87ndSmO2GG+Dvf5f4/UcegV9+8Vs6Sy1gFb7FUtdo1kwmcb/+Gk44AW69FXr0sIXZ\n6gDVVvhKqbZKqblKqRVKqW+UUmODn+cqpWYppYqCz82qL67FYkkaXbvCu++Kf79BA4ndHz5cQjst\nGUkyLPzdwM1a68OBvsA1SqluwG3AHK11PjAn+N5isaQap5wi0TwTJ0oC1xFHwO9/D//7n9+SWZJM\ntRW+1vo7rfUXwdfbgRVAa+BMYGpwsanAWdXdl8ViqSEaNoQbb4TVq6XxysSJcgcwbZp182QQSfXh\nK6U6AEcDnwEttdbfgQwKwEFR1hmjlCpUShWWlJQkUxyLxVJVDjoInn0WPvsM2raFiy8WP/9XX/kt\nmSUJJE3hK6WaAK8DN2itE74X1FpP0VoXaK0L8vLykiWOxWKpDr17w+LF0nVrxQoJ47zxRuvmSXOS\novCVUg0RZf+i1vqN4MdblFKHBL8/BPghGfuyWCy1RL16cMUV4ua54gqYNAkOOwxefdW6edKUZETp\nKOBvwAqt9UTHVzOA0cHXo4G3q7svi8XiA7m58PTT4uY55BAp0nbKKVKvx5JWJMPCPx64GBislFoW\nfAwHHgROUkoVAScF31sslnSld29YskTaLH76qcTu33+/LcqWRiidQrdmBQUFurCw0G8xLBZLPDZv\nhrFj4Z//lKJszzwD/fr5LVWdRSm1VGtdEG85m2lrsViqTqtW0m3r3Xdhxw7o3x+uucZO6qY4VuFb\nLJZ957TT4Jtv4PrrpRxz9+7w3nt+S2WJglX4FoulejRpAo89BosWwQEHyCDwm99AWZnfkllcWIVv\nsViSQ9++8MUX8Mc/Sn/d7t1hxgy/pbI4sArfYrEkj0aN4J57JJqnZUs480yx9rdt81syC1bhWyyW\nmuDoo0Xp33knvPSSFGSbOdNvqeo8VuFbLJaaISsL7r5bSjQccACcfDJcdx1UVPgtWZ3FKnyLxVKz\nFBTA0qXSZev//g+OOQa+/NJvqeokVuFbLJaap3FjePRRmDVLYvWPPRb+/GfYu9dvyeoUVuFbLJba\nY+hQKbU8YgTccguceqptpF6LWIVvsVhql+bN4fXXpSDbxx/DkUfC7Nl+S1UnsArfYrHUPkrBlVfC\n559DixYwbJhE9OzZ47dkGY1V+BaLxT969JDwzdGj4d57RfFbF0+NYRW+xWLxl5wceP55eO45Kc/Q\nq5c8W5KOVfgWiyU1uPRSidlv3BhOPBGefNJ21koyVuFb6jxl5QEmzy+mrNw28vCdo46CwkJx7Vxz\njbRW/OUXv6XKGKzCt2QMTsVdFSU+vXADD7y/kumFGyptx+IDBx4oRdfuuEPcPIMGwfff+y1VRtDA\nbwEsFjdl5QGmF25gZEFbcnOyKr2PhlHcABWBPUyaU0RFYA83nnRozP2NLGgLwNBuLZk8vzi0LsCV\nAzvvs9yWalCvnkziHnWUTOj27i2DwNFH+y1ZWmMtfIuveFnTbovb/T4aIwvaMv7Uw4IKXHy/b325\nieKSHTH3mZuTxZUDOzN7+ZbggKEd20n8zsEpp71LSBLnngsLF8rr/v1tueVqYi18S61irOCh3Voy\ne/kWKgK7mTRnDRC2po2ijfYcjdycLEYWtGV64QbO6Nmad7/6juKScu57dzl/Oa9nyPo2irkisIfs\nrPohi9y5H6eF7rxzAILr7iY7q0HEss71netU5S7B4kHPnhK6eeaZcNZZ0mzl+uv9liotsQrfUqsY\nRbh4bSlzV5Uwdkh+JWs6UbeI17JORTvlNwX86e2vyT9of6YuWhcaWMy+KgK7Q7L85byeIUvfjXvA\nqQjsYem3ZSxYUwqEFbpzffc67oHOun2qyCGHwLx5MGqUNE9fv15q8dSzToqqYBW+JemUlQeYumg9\noBndr2OEYhtZ0JaKwB62lf9C/y4tOKNnKzrnNQl9bxRzRWA3N57UNepngKcV7fTHz16+hWPa5zJp\nTlGlgQXgjJ6t+WrjT8xdVcL0wg1RLXH3QJCdVZ8Fa0oZ1DUvYnty3OsAxeh+HSLWcQ90Tpmt7z9B\nsrOlcfpNN0khtk2b4B//kKYrloSwCt+SdKYXbghNemZnNYhQfLk5WWRn1WfSnP8CMGPZ5ohJ1Z27\n9kY8l5UHWPrtj8FvVcR+vFw9RjlPnl/MA++vZOyQLiFFb5Sp+W7x2lLuGNGNI9tspiKwm7LyQCWF\n66WMzaAFmm0VgQhXkbmLALjxpEMjLHuQgahvpy0RMrsHLjsAxKB+fXHptGkDt94KpaXw5puw//5+\nS5YWWIVvSTpDu7Xkk6KtdDtkf0+/+8iCtny8uoSFxaWYyVVD44b1Ip6nLlrPgjVb6d+lBaP7dYhY\n1umzd0f09O6Qy6CueZzRs3XEHURZeYCKwG6O7diMuatKOLLNJrKzGvDA+ysrDU4QVsavFW7gkXOP\n4vP1ZYwsaEt2Vn0eeH9l6A4h2nF53YV0HtgkNKk7sqAtQ7u1ZPHa0tCgYP3/cVBKKm22bAmXXSYV\nON97T4qyWWJiFb6lWnhZo7OXb2HBmq0MyG/haaHm5mTxxIW9Qus5twWKsUO6MLpfx+CnojiPaX+g\n57bcytG8H9Q1j7mrSujbaQudBzaJWH7SnDX079Ii+ImKOSk8sqAtrxVuoLiknFv++W+KS8qpCOxm\n5669HN+5OdcNzqdvp+YM7daS6YUbuOesHsxYtglQlJUHIrbt/K3cE8FOWROdpK7z/OY3ErN/3nmS\nmTtrFhx8sN9SpTRW4VuqhZc1aizW3h1yQ1assb6dvn0va3rSnCLGn3pYSLmP7tcxFA1jcCrOaJE8\nQ7u15Mg2myjdEeDRWasZ3a9DRCSOc/I0Frk5WUz5TQH3vbuc6wbn8/n6MioCe5jy8VoATlhfFuFC\nAhx3DPW5cmDn0HE6l/FS6uZ1tMljiwdnnCHW/emnw8CB8NFH0Lq131KlLFbhW6pMLIULYuEbN8fc\nVSWh8EdnQpPbfWJcLWOH5Hv65J24Bxn3HIF5n53VgElzZLmdu/bQPKjwna4ViFTE7n2VlQeYvXwL\nd4zoxqtLNrD8u5+4KTRxrGOGjnpF6JjP3cfltV/rx0+QwYPhww9h+HCx9OfOFR+/pRJW4Vui4qV0\nysoD3PzasohIE7eyclrRfTttCYU/jh3ShbFD8jGK0u3imDRnTYR1Hw2ZNN1NRWAPxSU7ooY5On3q\n32z6Kehbr6xcvZS1kc0MUp8UlYTCMBvWL+L5S/tEbCOWAq+qT97rN7bEoX9/UfonnyylGObPh1at\n/JYq5bAK31KJsLKTpChnnPr0wg3MXVUSEZLoHhicys9MULqTlCC+iyMaZhuT5hRRuL6MhcWllZKo\nzHJmrsDtwnHL7J78NUraRPmU7giwYE0pbZs1Jv+g/UMRPdEs8Vh3QfGsd6/f2JIAxx0nSn/YMBgy\nRJT+QQf5LVVKYRW+pRJTF61n0pwixpzQKTT5aeLUvbJR41mwuTlZDO3WkptfW8YdI7qFomacdwIm\nfj1RTNhm57wmnHBoXuguwi2De/AxRJvsnfxxMRNH9qQisCc0eWwUe/MmWaFBsHmTrIj1zKBotu2u\nx1MVi9/9GycyqFi3T5DjjhOf/skni+KfOxeaNfNbqpTBKnyLBxIZ83NgN4HdexlzQqeICcWRBW0j\nEowSsc7ve3d50EWxPOQOccbMm/h1M9EZDxO22SynYSh23T256yaW1T20W0sem72asvJd3DR9GWXl\nuyLcS0ZW537MvEP/Li2Yu6qEqYvW89XGH4MZxHJnYAqyecXxR4v9d//GgGcxN/dgY5V+kAED4K23\npFH6iBESvZOd7bdUKYFV+HWUWNahCYl8e9lm1pdWkNWgXlQfvjsSJdo+7hjRDVgefI7E+OSdIZLx\ncEfvuH3o8couuGWevXwLO3ftpXHDetx9enc2//SzpyzO/ZiBauyQLgzIb0FFYHfIFWPuDLwmhE3y\nWbTYfyOrGQRl7qNLxJzF0G4tqQjs4fjOzeNmCtdJhg2Dl16CX/9awjbfegsaWHVnf4E6Siy3giik\nBqwvraBzXk5ISTuVff8uzTmmfW7UcMncnKyQa8iUKHZPdDr35yyZkAjxQhfDBdLCRc6ixcQbi9qU\nPXjjy01RLeZodwnG9ZKd1SAUk2+U8tghXejdIZdLn18Scmk57yzcdwBmm2YQHN2vQ+h4zB2EmYwe\nM6ATJxxqff2enHsu/PWvcPXV8pgyRZK26jBW4ddR4rlhovnqjQXrpRCdg8jIgrYUri8LfpPcNnVe\ntXq8FDhIoTOvyphuyzs3J4u/nNczNKBFs5jdx+jFjGWbmTSnKDSAjD/1MJ74qCjCpeUuAWHkMDgH\nQeM6GnNCJ9CaI9scyM5de1hYXEpjDxeY9e07uOoq2LgR7r8fOnWC8eP9lshXkqLwlVLPASOAH7TW\nPYKf5QKvAh2A9cB5WuttydifpfrEs5C9vvcaBKJ9P71wAwuLS0PujWRRXLKDy//+OetLK4KfiMXm\nrl4Z6XOvX2lSN1odHmcZZfCO5nEeo3ObpsjbsR2bMXZIFwYeKhEiQ7u1DMbgV3ZpJTL/Ydw7nfNy\nKC4pZ+yQfBo3rMfYIfmVyk2Y5W1pBgf33gvr1sHtt0N+vlj+dZRk1Rb9O3CK67PbgDla63xgTvC9\nxWeq05jD7b92b8N8bxTj2CFdOLLNgZ77Ly7ZUWU5ysoDXPZ8WNn379Ic0EyaU+RZvdIp0+h+HSOq\nZTpljXYMULn5ivsYIytwyuDz2bptgOLz9WXMXVXCjGWbmL18C385r2dEXZ9YcjgZWdCWQV3zKC4p\nZ1DXvOAxryE7q75nsTfjRnL/FsUlO7j0+SWVGsJkPErB3/4mETy/+Q18+aXfEvlGUix8rfXHSqkO\nro/PBE4Mvp4KzAPGJWN/ln3H7dse2q0lM5ZtxquUMURauGZ9r6YlXm4EU1jMuFLcsf2JJhY58wK+\nLRNlf2zHXB6/oFdwCRWSH/D0iVelXEG8TOJo2xzdr0MoL2BnYDcgE66gqmVxe915RItIcpencGb5\njvlHIcUl5TgjpeoM++0nVTULCqSJytKl0KJF/PUyjJr04bfUWn8HoLX+TillMyBSALdv26l4nREj\nXslXR7ZpGoxKqVxb3iuu3Zk8FE5kyg+FK7rLBDv36xVdM3ZIfkiBmto4QER5ZeMT90rESpRY0Tyx\ncCZ6mTh88zsZWfaVaJm8xSU7uO/d5ZUmg50D9APvr+SToq0Ul5QHE8eaeIaDZjwtW4rS798fLrgA\nPvhAyi3XIXyftFVKjQHGALRr185naTKDsvIAT88v5ptNP3HPWT0i3Ahu37YUGRML3xkxYhRF/y4t\n6N+lebCU8IGVassbotWU8fJ9m3VNIpSzcYhxV4B3y8NEyi4AUROxEiGWVR9vQtT5+xo59kWGRHHm\nNzjvAtxtF0t3/MKCNVtpl5vNlE/W0bxJo7rp3y8ogCefhMsvh7vvhnvu8VuiWqUmFf4WpdQhQev+\nEOAHr4W01lOAKQAFBQXJDeeoo0wv3BCq5njfu963706L0VjI7lIHxvofM6ATDevXq9SdCiIVYFUn\ngZ3yGiU/ZoBk95pCY/HWjbafRBKx9lXWaD1t3ZgQSq9CcV41ivYlsuaOEd0I7P6a/JaRbRzdbRcl\nU7gRvTvkkvVRUcTvW+e47DJYsADuuw9OOEHq6dcRarIh5AxgdPD1aODtGtyXxcHIgraMOaETx3du\nXikqJNakrXMSMjcniztGdAtOEkrVy9nLt1RaZ+qi9Tzw/spgmGR4Hze/tixisjOevKawWuOs+lH3\nVRUSmQzdF8xvZPzy5vjcv+vUReuYu6qE4zs3rzTomEHj5teWhZZ3Tw6XlQd4dNYqHp21utJ/5dxX\ns+wsshrUY8rHa9m5a2+lwdL9e5iJZOfvW52J/LTliSfgsMPg4ouhpMRvaWqNZIVlvoxM0LZQSm0E\n/gQ8CLymlLoc+C8wMhn7ssQnNyeL24cf7vldtP6wZj1jDU6eX8ymbRXMXVVC22aNK/nsw8hNWeH6\nspBfONHiX06r1hlzXl1/d03idom5feVgrGuJ2DF5Pk43283DusasUWS2F63chFfzlEFd82jcsF5E\nI5Vo7Rmdz3W2MmdODrzyCvTuDb/9rfj260BSVrKidC6I8tWQZGzfkkyU67kyZlBo26wxAGu3VnDP\nWUd4Lju6X8eIRuAmQ3TskHzO6NkqouZOrEQttwsi1XHL6Vako/t1CLl0jNVu3GxZHxVVirrx2l60\nchNecwzO6B0zF+NV7dQ9qFcE9tTdypxHHgkTJsDvfw9Tp8Ill/gtUY2jtE4dt3lBQYEuLCz0W4y0\nwitsMpYfOBFf8aOzVjNpThG/6duetVvL6XbI/lx1YpeEtmmU+PhTD4uoGDn+1MPqXEao+7+JNpGe\n7H0ai33skPzQoOP+/Z1N3uPNRWQ0e/dK05SvvoJvvknbbllKqaVa64J4y/kepWOpHu7b+3iRKV61\n392M7tchInb+gfdXxozqcFqnzhoxd771NSAJUonEsWca7uOL5mZLJk53msnCdfcOhqpFPmU09erB\nc8+JtX/NNVJkLYOxCj/N6d0hlw7Ns9m0rYLRx0viUbxb81ip97FKCcTDWeNmxrJNodIKtnRv7eGl\nyKP1KMjkwbZKdOkCd90F48aJwj/rLL8lqjGsSyfNufT5JaEJt0Fd87hjRLeoLf+gcuExIMLP7nTJ\nxCt57N6+M6xz7JD8fU58ssTHmUEb6/+Otb67AF2dZtcuOOYY+OknWLEi7ernW5dOHeGOEd3Ytecb\nArv3hBJw3BEXlXvHhlPvxV8fjgZxWoiJllUwyETjHkSJVJ6ktVSdaAOss/nJvkTYmPPAUNXy1BlH\nw4ZSSvmEE+ChhyQpKwOxCj/NaZadxYD8FiFLz1mywF0eAbwiPOQO79iOuZWyQp0WOxBRGiGaT95Z\n5sBSfaK538zv37tDLkCVE6lGFrTlk6KtLFizlaq0lsxoBgyQhimPPCKhmm3a+C1R0rEKP83xUggm\nBtsZreFMqDKWvigJFaxPQ7ACY4NKE7AjC9qyrSLA4rWlEdm27jouluTjNYfivmNzxt4nSm5OFo9f\ncLTnhG40Mj2qCoAHH5SY/DvvlMncDMMq/DQn2qSqO1rDVE40sdeT5hSFLDxnXfWKwJ6I7E9zcXsp\nFq8+tZbk4h6gZy/fEueOTUhEOSfSFtJJnaiz36GDROtMmgS33irZuBmEVfhpTrRoC69ojXDVSSlj\n8Gnx1uDSOtTW0FzQS7/dxoI1W0PtCb0US6w+tZbk4fbXu+/Y4nXmiqac3Qo+3jpVidhKa267Tdoh\n3nsvvPii39IkFavw05yqFOJyXrBTF61nyfpt9O/SPBSt46w0Kb5d6SRlSia4lUDnvCbWsq8FnLkN\nZn4m0aqh7sl3r4lfEAU/tFtLFq8tjTofUGdCOQ86CH73O/jLXyRcMz/fb4mShlX4aY6XVebuu+q8\n2E1avek32+2Qpp7f79y1lw9sgyr4AAAgAElEQVS//p4Fa0qZumhd7WRj7t4NW7bADz9AWRls3w4V\nFRIyp7UkyTRqJCFzTZtCbi7k5Ukjiwyua+5UtJElpdcTLazS6QpyR1aZuZfrBofvFMrKAyEXXbT5\ngKpmdac1N90Ejz8uSv/pp/2WJmlYhZ/meFlyxkIbWdCWp+cXM+XjtZSWB0KZnqbfbOe8HH7etZsH\n3l8bUUwtNyeLxg3r8W1ZBcd3bk51OzZVYvdu+PprKCyUlPbly2HNGmk2vWdP1bfXoAG0agUdO0Ln\nztC1K3TrJtmTbdtmZFEsd1il14DsbjpjzpXw3AuhO7TJ84tDcz7Ovghe26sI7AmVbIAM9ecffLC0\nQ5w6VcooZ0h3LKvw0xx3n1nj6zXZrd9s+gkg9AyRte4Pado4+KlbKcr7gg65EaUW9gmtRam/9x7M\nng0LF0J5uXzXpAkcfjgcf7wo7DZt5Ja6eXM44ACx5hs2FOt+zx745RdZ93//g9JSuRvYvBk2bJBG\n1f/6V2R0RW6uJNQceyz06yePpk337ThSCGfOQ7QBOVr5BK+5F+ey8UJBKwK760bBtbFj4ZlnpB/u\nuMzozmozbdMc9222CcU0JQ22VQQ8QyfjZWomJQRv1Sp44QV49VWx4EEs70GDRMH37g2dOokyTyY/\n/iiFsL76Cr74Aj7/XO4o9uyRfR19NAwZAsOGSbu7Ro2Su/9aoqrZtolm18b77+tEeKZh4EC58ywq\nSv55mkQSzbRFa50yj2OOOUZbwpTu+EU/PW+NLt3xS9Rlnp63Rrcf966+5LnP9JoftuuJM1fqi55Z\nrNuPe1c/PW9NlbaVFHbt0vqVV7Tu319r0LpePa2HDtX66ae13rChZvcdi+3btZ49W+s779R6wACt\nGzYU+XJytD7rLK2fe07rkhL/5NsHzH/v/J+duP9zs7xv50Y68sILcp7Mm+e3JDEBCnUCOta6dFKY\nRELrJGOyhLmrSqgIfMVn67YxZkDHUPbto7NWYdwzk+YURbh7kkogAM8/L4kr69eL5f7QQ+IHPfjg\n5O5rX2jSRKz6IUMkbX7HDpg7V9xM774rRbPq1xeL7rzz4Nxzxa2UwsSLwXeWpzZNVowbyOmnj9UU\np87zq1/B1VfLnerAgX5LU21S9x6ljuJsN2fa6Tm7E7lb0eXmZHFM+2bBd6LYGwezZWcv38KkOWuY\nNKeInYE9EV2Wom2vymgNr70mCSpXXSXK/a235Bb41ltTQ9l70aQJnH46PPUU/Pe/sHSp+Gk3bgwf\nx+mnw/Tp8PPPfkvrSbQ2jmFDQUecP6b0xeh+Hbnv3eWOlopy3iz99se61eYwEbKzpXrmG29ItFia\nYy38FMNt1Xu1tnM30B7dr2Oo09GMZZsBHRowPl5dwsLiUhpn1avUZanamZNFRXDllWIpH3mkWMun\nnJJ+UTFKQa9e8rjvPvj3v+Gll+Tx7rvQrBlcdBFccQUcdZTf0sakrDxARWAPY4d0ieqn9+q3u/Tb\nMhas2crURettPSQ3554L06bBvHlw0kl+S1MtrIWfYriteie9O+TSOS+HbeW7IhpeG0uvc14TsrPq\nM2nOGqYXbiA3J4snLuzF+FMPC138TovQua8qWftaS4zykUfKpOiTT8rzqaemn7J3oxT07AkPPwzf\nfgszZ8og9swz8nnfvhKql6JWvwnXzM5qUEnZm/94Z2AvIBFYII3od+3ZG1yq6kEcGd8E/aSTYL/9\nZPBPc6zCTzGcCTPuC+iJj4ooLimnuGRH1EEh1oARa19TF62PGESism0bnHGGhKwNGSLhlldfnZmJ\nT/Xry8X+0ksS+vnoo1Iv/ZJLJHz09tvFBZRCxPr/Q3d0SnonnNGzVWiA+GzdtuBnrausvM124547\n6Up2trRBnDnTb0mqTyIzu7X1sFE6QrToizU/bA9F47gp3fGLnjhzpZ44c1VEtIVzW17RGOb7iTNX\nxo/UWLlS6y5dJMLl8ce13ru3+gebbuzdq/WcORLZU6+e1vXra33BBVoXFvotWYhoUTfm84kzV0ac\nExNnrtITZ64MnUPmfEh023UiyueRRyRaZ/NmvyXxBBulk75INMXuUOVKc2seq3aNWGrhRiZeJY69\nfPYJ9zZdvBhOO02s3rlzJY6+LqIUDB4sj3Xr4Ikn4Nln4eWX5bNx4+SuwCfXVll5gOtf/oIFa0qj\nRt2c0bN1xByQ8dmXlQdY+u2PwaW85XcWcjPRXnWixs6AAfK8cKH49NMU69JJQUTxKibNKQomysTG\nTNSNGdCRMQM6UVoe4NFZqyKKnhn3jft2P1qkRwSffAJDh8rk5eLFdVfZu+nYESZOlCzfhx+GlSvh\n5JOhoABefx327o2/jSQzvXADC9aUBt+pSt898P5KZi/fEvrPnf53WXdrRAN0NyML2oaivW5+bVmE\n66esPMCjs1aHzr2MomdPyMqSJL40xir8FCJy8stMnlWeRCsu2cGlzy+huGQHEJ6oa96kEc2bZDHl\n47WhiVsnCSl3N4WFMHy41KT55BOJr7dE0rQp3HILrF0r1v727WIFHnGEWP77Uh9oHxlZ0JaxQ/KD\nUTodKn3nHvDNIDB10ToqArsZOySfO0Z085xDAjmH/nJez4gQX3PeTl20nklzipg0Z02wT3IG0agR\ndO8Oy5b5LUm1sC6dFMKZAGNCLb06HX1SVBK04qTxiDsBxyTXROuSlLDCX79e3DgtWkgNnEMOSdKR\nZiiNGsHll8uk7muvwf33w4UXwj33wJ/+JAldNZyeH6vNpJfrxXnOmF7Hs5dviRuum3/Q/lQE9lC6\n45eQoh87pAvHdszls3VloUigjKJHD3FnpjHWwk8hdu7aG3r2ssaNNdbtkKYM6poXKn7lXNZc8MZ3\n67xdf+D9lZVuw6NSUSEJJ4EAvP8+tG6d/APOVOrXhwsukFo+r70Wfn/kkZLAk0L1q8y5M7pfh5D1\nHy/Sa3rhBqZ8spbP1pUx5ZN1mASv0f060reTZCc3zsrAqK38fInK2rnTb0n2GWvhpxLRvThAFSZY\ng7jr4psKmdMLN8SfZBs7VhTWv/6VcW3eao169WDkSDjnHFH8d90lr485BiZMqPHJ3Vh3dV6F15zn\nRKzzY2RBW0p3BPj3xm0c1aZZRIJXtSurpjLt28vzxo1p2xTFWvgpROOsehHPBuMjBarkg3daasb3\nmlCM/jvviC963DhJprJUj3r14PzzpWLn88/D1q0yuTt4MCxZUmO7nbpoXcg/78YYA5ElFhIjNyeL\n5k2y+GzdNpo3yYqY/IWqnaNphSkT8v33/spRDayFn0K4/fbRimDFwl0u2UlC4XPbt0si1RFHSJEx\nS/Jo0ED8+xdcID1T77tP6vSfc45Y/Icmu6SBcj2HSyTvDE7QntGzVahtYlVwhw7H6rKWMeRKZjLb\ntvkrRzWwFn4K4fbbm4to6bdljB3SpdIkrFdGpDPrcZ8yICdMgE2bRCFlZdDFmko0agTXXSc9Au66\nCz74QCJArrlGGrokCeOXd0brmIiuKZ+sIzurPs2yI3sgTJ5fTHHJjkrnlvs7gG0Vu5g0p4jHZq9m\naLeWDOqaR+8Oudz82rLMzLxtEuwnYZr3pCHWwk9hnH73Afl5MRtQO9dxPrtfx2TTJikfcPHFUjPG\nUrPsv79E71x1ldxNTZ4sZXhvuw1uvBEaN46/jRhEi8pxRnE5zyMglFTlbl/oTLiSUtx7eOffmwGY\nv6qE1gc2Dq2Tsd2wGgTV5e7d/spRDazCTwGiTa4Zv7uZXHP2GfVS7F7bqVIG5EMPScz4Pfck58As\nidGypRSgGztW5k3+8AdpnD1hgoR1JimU05wfo/t1iCig53wGGNqtJUe22UxFYHcoec98P7RbS/p2\n2kJFYDfbKnaRm9OQR3/dkw4tciK+zzh3DoQT6VK481U8rMJPAaJZ604F7l7GWG/mVtu5TEVgTyhS\nwkyoxfWpbtsmvTsvugg6dKjpQ7Z40bWr9BKYPx9uvlnutB5/XLJ5+/ev9ua9zg8vmmVnkZ1Vnwfe\nX0l2sLeC826h88AmlJUHKjVOd36fkZhwzGreefmJVfg+46xf7r4A3RNhzudYy1QEdkcMDl4DSqVB\n4B//kNj7G26ooSO1JMzAgRK9M22aVOQcMEDCOx9+uFqDsdf5AXi+jna+JUpG9r0tK5PnAw/0V45q\nYBW+z5hJtPGnHlbpwnDH3Xu5Z7yWKS7ZwVcbf2Jot5aVlgG5GE2zcwgOAn//uzQV79mzRo7TUkXq\n1ZP2kOecA3/+s7jbZsyAm26C8ePF/7+PDDz0oIjzY/HaUoZ2axmawI11vhniNc+pdnOdVMSEY6Zq\nF7cEqHGFr5Q6BZgE1Aee1Vo/WNP7TCdiWVLui05C6tYBKhR5IcXVIjO1Zi/fwtxVJfTttIXOA5tU\n2s70wg2RE2tFRVIj5NFHk314luqSkyMTu5dfLor+gQckln/CBBg9ukr+ZKOETR2cvp22AIReuzus\nxSLWeSt3rRL2mVETt+uC+Qzt2vkrRzWoUYWvlKoP/BU4CdgIfK6UmqG1Xl6T+00nYllSztvibRUB\nxvyjkOISCQnLDqaum/h842sFmTgzVpt7O+4J39ycLEm0Ajj77Bo7Tks1adNGIniuvVbcbpddBn/9\nKzz2WML+fffE6z5FcgWJdd6aUt2DuuZVaZspz8qV0KpVODwzDalpC78PsEZrvRZAKfUKcCZgFb4L\nL5+n87Z48dpSikvKaZ+bzVlHt45ZKM1t4Ueb8A2vMFvKJ5jUcUvqcuyxsGiRdOEaN078+7/+tfj3\n41ie7olXg5firo4PvsplPNKFL79M+Z7GcUmkS8q+PoBzETeOeX8x8H+uZcYAhUBhu3btaq4lTIrj\n1eXK2UkoVrcrN+4ORDE7Eu3Zo3XTplqPGZO0Y7HUEjt2aH3nnVrvt588/vhH+SwJROu6ligZ1wVr\n2zatldL6rrv8lsQTEux4VdMKf6SHwn8i2vJ1ucWhbxdIUZGcBs8+W7v7tSSPb7/V+vzz5X9s3Vrr\nF16QgbwaZJzCri5vvim/77x5fkviSaIKv6YzCDYCTudgG2BzDe8zLdmn5iTJ4Jtv5PmII2p3v5bk\n0a6dNFpZsEB6Flx8MfTrB59+us+b9O18TFXefRcOOACOO85vSapFTSv8z4F8pVRHpVQWcD4wo4b3\naakKa6QPbrqWe7U4OP54+OwzCbH9739F6V94oby27DuBALz5JowYkfb1pWpU4WutdwPXAh8CK4DX\ntNbf1OQ+LVVk0ybIzk7rZBKLg3r1JFxz9Wq44w5RVF27yuvt2/2WLj2ZMUOSrkaN8luSalPjRSG0\n1u9prQ/VWnfWWt9f0/uzVJGtWyEvr0YbcVh8oEkTuPdeWLVKwm3vv1/u4p55plZ77GYETzwhEWzD\nhvktSbVJ3ypAluSwfbv4Ji2ZSbt2EsK5eDF06QJjxkho4fvvp1SrxZTl00/h44/h+uulVWWaYxV+\nXScQSHu/pCUBjj0WPvkE/vlP+PlnGD4chg6FpUv9lix10Voql+blwZVX+i1NUrAKv65Tr1647Ksl\ns1FKavMsXw6TJknP4oIC6cBlJu8tYd58E+bOhTvvlBIXGYBV+HWd/fYTi89Sd8jKEhfFmjViwc6Y\nAYcfDr/7HWy2UdMA/Pij/EZHHikNajIEq/DrOk2bysltqXs0bSp9ddesgd/+ViZ0O3eGW26BkhK/\npfMPrWXw+/576RHRIHOKCluFX9fJy5OL27p16i6HHCIdt1atkrr7EydCx45Si7+01G/pap8nn5RE\ntrvvFpdXBmEVfl2nTRvp0WlqfVvqLp06SSOcr7+WJKMHH5SGK7fdltTm6inNBx9Iq8kRI6QcdYZh\nFX5dp3OwkmFxsb9yWFKHww+HV16B//xHFJ/ptDV2bGZn7c6fD7/6lZQZeemltO5dG43MOyJL1Tj8\ncHn+xiZAW1x07y6ujRUrpATzk0+KgXDxxfDvf/stXXL54AM49VQZ2D74oFodxVIZq/DrOu3aSVmF\nL7/0WxJLqtK1q3TZKi6WBixvvimtMIcMkQifdM7c1VoayYwYIT0h5s2Dli39lqrGsAq/rqOU9LL9\n7DO/JbGkOu3aSRvMDRvEv796NZx5pmTwPvRQ+vn5f/pJ6uNce61Y9/Pnw0EH+S1VjWIVvkWqLH71\nFWzb5rcklnSgWTPptrVuHUyfLnVmbrtNAgDOPRfee08CAVKZd96BHj3g1Vel5tDbb2esG8eJVfgW\nGDxYbm3nzvVbEks60aCBKPh58yR799prxUo+7TRR/jfcIDV8Uqlmz7JlcMopcMYZkoewaJFUEs3A\nCVov6sZRWmLTt68UUHvvPb8lsaQrhx8u8fubNsEbb0gt/qeekoYh7dtLhM+cOVK7qbYxxszpp8PR\nR8OSJfCXv8i8VZ8+tS+PjyidQqNvQUGBLiws9FuMusn558NHH8F332VEVUBLCvDTT+Iq+ec/YeZM\n+OUXKds8eLBM+A4cKG6VmjjftJa7jtdfh2nToKgIWrSA666TkgkZ1v9BKbVUax03S8xa+Bbh3HMl\n43bePL8lqRrlpbBwkjxX9fOSInhxpDxXZduWxGjaFH7zG4nkKS2Ft96SSdKvvxaLv2dPyM2Vqp3j\nxsGLL4rVvWNH1fe1cyd88QU8+yxcdplkCvfoAXfdBa1ahbuA3XlncpR9oudGip1DmVMkwlI9TjtN\nJq1eeEGsr3Rh2TSYdae8Pn5s+PMlU2D+gxCogD5jZLmeoyKXX78AimbK67OeDi+T01wu0LeuCn/v\n3Lal6uTkSETPmWfK+2+/lTrzixaJi+WxxyLdPS1ayDxAy5YyKOy/PzRqJFFlu3dDRYXUgNqyRaKG\nNm0KzxXk5srdw223ia++VavqyV5eGnluQPTzzk205by2WQtYhW8RGjeW5JqXXoLHH0+fpig9R0U+\nmwtpV3lwAR150fUcBYFyGQh6Xwnb1sGAWysvY5R9/rDwti3Jo317SeC6+GJ5v2uX1PJZsUKKua1f\nL0r8hx/k/Y4d4hLSWlxApi3nQQeJi6hTJ5lHOPpoCROtTgc3tzL2UtrmnDh0uFjw0RS3+/w0JDpg\nJBmr8C1hxoyRW+IXXoBrrvFbmsTIaR623HuOClv27Y+HgeOgj6Nxhbkos3LkYssfBluLYMOiyAtz\n2bSwsj/r6Vq1wOosDRuKC6ZHD3/l8Lqz81LaOc3lu4WTYitu9/lpzqVoA0ENYxW+JUzv3vJ4/HG4\n+urUDlVzWmFO9w3B2/pvF8KhJ4cvMOfF6LTOOvQPX4hO6825LUvdYckUUfbtj5c7wfLSyHPDzaHD\nxTV46PDo2/Sy5mNtswZJ4Sva4gs33igZlO+847cksTEX0bJphBTzrgp5Pu56se6dbh7nxJm52PLy\n5dltwec0h6xsmP+QWHspMuFmqQ2C59L27+T/XzYt9uKr35MBYrVHSLM57w4dLudjoML3c8kqfEsk\nI0dKhMP996dWwoybnqPgpHvkuc+V8rphY7lIm7SAQbdXnmB76yqJyEkkaqLnKHHpFM2EJZNTKtLC\nUoP0uVL+97K14fkbt8HgfH/ocFnOy8JfMlnOu6+nixtx/oPxB5Aaxrp0LJE0aCB1wMeMkUSs007z\nWyJvjJXudO2AXFhuv2jPUeGInG3rxG8P4Vtqr4iJnObhyJ1AhS8TbBYfMP/7kslAcOLX7ZJxvgc5\nrzr0hzz3uaHCzz757N1YhW+pzCWXSHGsP/xBikqlsi/fXHyB8rCy93LRnPV09MibaBETzkElK9v3\ni9VSSzgn9p3/e7Rn92tDj3Nh8xfyHMtnX4shmlbhWyrTsKH0Or3wQonYGT3ab4miYy60aFa482Jy\nx9q7t+F10foUL23xGec54VbW7vfRzjfj3zfWf7RzqRZDNG1pBYs3e/dKHZQNGyQ+OtUrCUa7mEzY\n3En3VL6YYinz8lK5rV+/QCJ+Bt4GgzKv5Z0lQeKdK+7EvvxhMGyCKP1Dh8tzoFzmmNzhvkkwKmxp\nBUv1qFcPJk2S2jr33OO3NPExVpf7gok1qRYR6ePAxGLPf0iUPWBDNOsI0UohRDtXnN8tmSxKvdOg\ncOTO8WPledadUF4G2S3kO+d2op27NYB16Vii07cvXH65NL0YNQqOOspviaqO+7YawhaVGQTcrpwl\nk4Ox2P2gdQE0zJbyDJbMJ5p7xcvtZ86jtv3EqNi1ExY9Dp1OlDtC9zrFH0HFVmiRL+fe3AmAknOr\nltyFVuFbYvPwwxKTf8UV8OmnEsWT6pSXSgINGnqMlM9MeJ2Jupn/oHzu6TMNRld0OMG6ceoa0eZz\nvCZdne6bopnQqlf4defBkRFfPUfBjq3y/tQ/iyEy/yF5n5Vda9FfaXD1WnwlNxf+7//gvPNE+d9+\nu98SxWfZtLBCR4WVtvHnDxwXjuH3os+YcHSGc/Doc6WduM1k3L70eO+9MrYhMkzYsGwafPq4nHd5\n+ZAdrOnkDNmsBazCt8Rn5EhR+HfdJd2CevXyW6LY9Bwlt89r58GGxeH0eHfkhRfui3rhpPDgkZVj\n4/AzmVjx9s73X74Av345nKkNkTH4XueIuwRDTnMxIGo5EctO2loS48knIS9PQjX3pV55TeE1yZbT\nHM55Tm6v184Ll0fwmhxzr2+yI5dMlvc9R4k/duC4cGVEm3GbmTizt93vy0vFIs/tJIl7Mz3udL3O\nRfPZ19Mrl2CINRFcQ1iFb0mM5s2lc9Dq1VJJM1XCeaNdNCbZykRMLJkS/s55YVZaX0U+5zQXl9Cg\n28PRFkumWMWficSKllk2TXzuXUeEQy69lnGfi6G7BBU5eJgaO7FcizWAdelYEmfQIOkYdPfd0L8/\n/Pa3/spTXioTsM5CaU5ymkPbPrB2LqGwSnf5W/cknTM70rkfZ1RPoNyWWqgLuHskmGf3HaJxAcbK\nwHXOA7x+mdx5BsrFkKhFqqXwlVIjgbuAw4E+WutCx3fjgcuBPcD1WusPq7MvS4rwxz9KtM6118KR\nR8Kxx/oni5mcHXhbuPaJO8Stx0jY8JmEzJmL01lewV2v3IRxtuoVnrh1+3LLS71r9lgyi1jZtuZc\nKt8qoZiB8sjeCwb3esumibIHwneTtUd1LfyvgV8Bk50fKqW6AecD3YFWwGyl1KFa6z3V3J/Fb+rX\nl65YvXvD2WfD559D69b+yBIqq1AePcRt9Xtyga2dBzktvC01L0vOacW7LTefaplbahj3hL2zlpJx\nwax+L9II6HRicGXlPanrFdkTKIfATkCH55ZqiWopfK31CgBVuZ3YmcArWutfgHVKqTVAH+DT6uzP\nkiI0bw5vvw39+kmP0vnzpWdpbeO8IAFQlVvO9RwlVtj3X0mCTLxaOhEF03K87wJsaGbmENFIZ7IY\nDm5Xi1Hkzh7IzpBMMwiAKHszqXvR9Mp3hznNZdsmRLiWI79qyoffGljseL8x+JklUzjiCHj5ZVH4\nF14Ib7wh1r8fmIsIYO4D4e5Xg8YHLbUWYuH/b1Pl0shmffdF53Urbi7cQ4fLBT1sglhxlvTF+b/u\n2hn57J67idYhzRmSecZTMONq6ZMM0RO5UrXFoVJqNnCwx1d/0Fq/HW01j888wzqUUmOAMQDt2rWL\nJ44llRgxQtohXnutRO489VT1mkcnBe16JrIefqJNyaMl2fQcFZ703ROAtsdS2+nxlmoQ6381kVwN\ns+XZa+4m3jY3LAr3SW7XO7yPJVOgohRKiyTT1hnDX4vEVfha66H7sN2NQFvH+zbA5ijbnwJMAamW\nuQ/7svjJNdfAxo1SP/+gg/wvtNbnSrlNdrt2opVGNlUxjdIG7/ILTotuwK3SSCU335f0eMs+ECqr\n4Zjvcf+v7gxrdwSY6Z286kPo2D+ceR0tmscQkflN2N3jAzXl0pkBvKSUmohM2uYDS2poXxa/mTAB\nSkrg3nvhgAPg97/3TxZzARsfKVS+sJ2Y+GqAb16HQ091FMCKEu5prLju58gytZweb9kHjFIeeFv0\n2Hfn/I25ixt4m6NUQtAe/e9CeRj/e6xoHvN5oCJs4XvF8NcS1Q3LPBt4AsgD/qWUWqa1Pllr/Y1S\n6jVgObAbuMZG6GQwSsHkybB9O9xyC+y3n7h5/CSajzRa1MR/posSP6C1dwGsaNu2bpz0wH0+xJqA\nd4buosMTtsMmiH9/01Jo3SvxqC2TvJcCVDdK503gzSjf3Q/cX53tW9KI+vUlEzcQgOuuk8/8VPqx\nLHrn7feyaXJr3vkkmWw78Q5o3sm7AJYl/fAqfue8+/OKvnIPDpu/DJfYzmkhPRIOPblyAxNnxE60\n5CyfDQSbaWtJHg0bwquvSqG1666DXbvgxhv9lioS58XsbkZtJtuad4q9jWjhe5bUwp1V7eWC8ZqY\ndStn5/yPwTlH5BW2GS3Cy+d5HqvwLcklKwteew0uughuukkKrd1xRwpE7wRxWv7RUuHjXqCuejsG\nL2WRQtZdncO4ZjoNkhIbXi4YL1eP+7933y06I7XM+0AF7CqXDO0UCcH0wip8S/LJypIY/Zwcqb1T\nWgoTJ0rbxNomlsKN1ow6lA1Z4Z0J6YzmKCkKx+Sb4mrObZnIjuKPpIKnVfq1h1GwbfvBJw9DRVn0\nc8CZTetc1wuv8hxZ2fI/n3RP/PPMR6zCt9QMDRrAc8/BgQdKb9wffoDnn4dGjWpXjn25nc5pLrf/\ns+70Drd0XsARMfl9PSJ7gpEda+eJLCly4dcJzP/04siwNR4tPNc9t7NkskzQmvaWsTKz3Z+lMFbh\nW2qOevWkH+7BB8P48dIQ/Y03oFmz2pPB60J0t0Bc/V7lCbdEL2ATk98839vC63Ml4vrR4fhu6+Kp\nWZy/MUDeYTIgD5uQWM9aZ6guVB70E8nMTlGswrfULErBbbdBmzZw2WVSf+fdd6Fz59rZf7RepCYR\nxkRguCfc4tXPcSbymJh8r/huE5KXcD9dyz7hVPLuyfhFj0s8/dfTxWp3Nhh3rud26RkL3wzUbiMh\nDQdtq/AttcOoUdC2LTYcf1UAABcYSURBVPzqV1JS+fXXYeBAf2RxTrJpBa2OlovY1ElxZ2WuXyCu\nAC8XgDuRJ9oAEVo+2E/XnQlsqR7xsl2dGbb5w7zXc07SuqOvnK0uN3wmLjqv8yLFsR2vLLXHwIHw\n2WfSKnHoUGmb6EfnLGN15+RJY+msnHBtk4hUeSUZt+6OWSDK5KR7IhulLHxM1lv4WOSyzjT9PlfK\nfswEby33NE17nN3KSorEP19SFP4/nNmuzhLHfa6U37/d8ZH/Z89R8rmZoHfuo6QovK+eoyTaB6Dl\nkeHkvDT7/6yFb6ldunSBxYslbPOaa6CwUBT/fvvVviwJVTLUlZuhO/l6ethy/P6r8LPbxWD8+xCO\nBglUiOVZyzXR0xqnRW7ccHt2QedBscNhQ1b7BCmLYCbTvSboo8XVn/O3yLkB5+s0mZuxCt9S+zRt\nCjNmwF13Sf2dZcvgn/+ETnESnpJNtIm2iIJaV4b9/G9dJbfwEFlrZeBtorhPvAPqZ1WeHIya7KXD\ng4VN4PImVnVLE0KZ17WyWyba5KwprudOolq/oHJIprMcMkQP4421vxTDKnyLP9SrJ5U1+/SBiy+G\nXr0kbPPss2tXjniWWU5zUeDb1oWVfqte4TjsPmPCF3tWTrgKYnaUglpOZfL+LcGdpEhSWiritLaN\nv9zpa79oOvz3c1j9gcTbG8w8jfsOyqtV4fu/l7u4vK7i5nNO4OYlqLzTJCzT+vAt/jJiBHzxBRx6\nqEzoXnst/Pxz7e3fKJQlk8P+WidGIWwtgsa5ouh3VUD7fqJMKsoi/cfG/wthP7ITo3BWvyfN1c2g\nYYn0zxt6jortLy8vlRpIW4skucoQSoZ6KNh71mPbENlj9vuvo8+rOOcLvHDOG6Qw1sK3+E/HjrBg\ngYRvPvoofPyx9M3t0aPm9922H7TIh/KysHvFGY7pVAg7y0T5NGwM3y6Sz0xtc2MRussyRyNWxc14\ndx3uGv4prmQSxgy+gYpwJrO7l4HXOluLILcTNG0PcydE5lZApCstUB7ZuvLQ4ZIFnZsPWY2loY1X\nvsTM28P+fHMXlyZ+eydW4VtSg6wsKb9w0klwySVQUCBNVa6/vmZLMnzysCiMvXvC8dlu/7tpOp3V\nOJhIhVj2xXPCrewMid7ax0rUiecPdiYGZUrjlfJS+Z0H3kZESWK3G8eN+Z2dYZdmzgUqu9ICFZG/\nrWlyXz9L1jGJc+6Kmi0cyVuGNPHbO7EK35JanHoq/Oc/cMUVUmlzxgwp0dChQ83sz/jntxaJ8nRP\nDHrFZANkN4eytVA8W1rZGZKRcRktO9hYk2YQMo1X0tDSrIQZxPKHyX9ilHa0chTufrM9RhLKaHbm\nVDiXNe/N3QNEn6B1T7R/+rgMBs4exmnit49Aa50yj2OOOUZbLFprrffu1fqZZ7Ru0kQeTz2l9Z49\nNbOvHVu1XvCY1j+slucdW+Ov89H9Wv/pAHlOdDvm+1jbdy6zY6ts/6MJ8vjTAfKdmwWPRf+uKkST\nLxG5q7uNHVu1nnZu+DjiLW+O2blONFnMf7Wvv09Vjt8ngEKdgI61Fr4lNVFKrPyTToLLL4err5Za\n+888I7H8ySRaW8RYeIX3OStjGr+/qcS4ZIrE8pvPTYEulCRvmVR9p5vA6abofYVYv8aidVJVSzNa\nGWdnyd99DTk0v0GgIrLLU7xtePUddi/ntOqN+6fHuZUzpM36XtnQ7mUy4e6oCliFb0lt2reHWbPg\n2WelV+4RR8Cf/gQ33ywNV5KJU3G63QBupeAV3rdhsbw++Ehpj+hc16Tlm5K6Tj/85i8ia6ubZ2d2\nb2mxRPV06F85VDCaGymaMvNq+mGUvZHP/bt4lYv22v6uishnt+sl1qAUzx3mTogyLpY814S5mfR1\n7tPI5x7Uow1Q0WrzpImvPhpW4VtSH6Xgt7+F006TsM3x4+HFF+Hpp+H445O3H6fCMYph/QKptWOU\nc6yJ1rXzRGEef0PlcrqBCiLa7PUcBeUlEgo44Nawleqsz46G466XyWJnwa5ESaQypFnOKHt3bRij\n+EAUo/F/RysE17Bx5HM8ZekeWJ3RR2Z9d9KVibd33+04J3Ddk74mssldPM1k3OIq8RGvNk+aYhW+\nJX1o1UrKK7/9trRQ7N8fLr1UonkOOii5++o5KmxJturlXQnTvbxR6m68mljnNJckn7VzpSyAZ0XP\nh2S/VU0Ccspknt2KNdpyEFnUzVjAx10f/g3cheCck6OocM0gr227cVe2dEYfQeRg4XS9mR6zzt/E\nfF9SBN+8Icu8fpnccX3/VdidNvC28KDm5ZqDyOzbNCl9nAhW4VvSjzPPhCFDpCzDxInw5ptw993w\nu99J45Vk4OVTduJVqyUrO5xxG01BuMvsQmwlHK+qZiIdvdz+efBWpBB5Z3PW04QGsC1fQf/nvKOY\nDM6aQU7XV8g95bjDiebqcUYfuX8L9/toUUyr35Ooqxb5ouSNom/aBn7aGHY3OX8jN6vf8x5U0p1E\nZnZr62GjdCxVZvlyrU86SWvQuls3rT/8sHb26xUZk0g0h1kv0agRE2Ey9Yzwdp37SSRCxxnR8sPq\nYNTP/d5y/rBa6yeOiYyWiRYJ4z7eaMfvdcxuufclUsprH87f5YfVcpxThsp3zwytHFkVjTSIzHGC\njdKx1AkOPxw+/FDcPDffDCefDMOHwyOPQLduNbdfLyszXtMUs7xx/cTzCZeXwoYl8trZItG4WXZs\nlbsKZ1tFL4vfHVM+/0Fxa3jJaaxj5+Rtq14yj+GW1+3njnbcXsfsngiOVqEyUdx3Hc7idxs+k9ft\n+sLhIxLzxWeQG8eJVfiW9EcpOOssSdp64gm47z6J5rn8cnH1HHJI8vfpdJfMfYCQuyKR8EO3P9/g\nFVa4dq7U5G/bt/JE45agX9rpQvEqNuZVvM1MbLpLDbjnImINEO6BJNpx5zSX8Mn3bxF3yvE3Vi5L\nHC0BKlGiKWj3ZLr5rI6EYbqxCt+SOTRqJKGbl1wi/v2nnoJp0yRj95ZbpKF6snGGXDon/xKx3t3x\n4O44eLfVagqA9Rgp+3L24TX0HCV5AGbC8pznIhWbc6DKyoHyrTJRGiiXjGLnXISp4jlwHKFyB+46\nN0bJmpo05VvDBcrctWjWzpVHw2zZl9dvlZ0be/6jqsraOZDYFpO2WqYlA2nRAiZNghUrxPKfMEFq\n7T/4IJSXJ3dfPUcFa+KPi7SSTYVG8K7UaCxiE/JoQiM7DYos6euswGjWWf2efJ6XX3lfOc3lbgDC\nbiAvzLYbBqNhnCWae44KNmvRwVDMHLl7MZ95VZQ0NWkWPS7hj+7jGzYBcjtH7ss5YLx1VfwOYGab\nb13lXdXUqxqmszrprDtF/ngRVxmMtfAtmUvnzlJ189Zb4Q9/kPj9Rx+FcePgqqsgOzv+NuLh5aJx\nV310Zswa69pkirqtXLOsV6SPe9lo2bF9xiAuGRVfsfUZE+lSMccUygUg6OIh8s7AHerZcxQUBy14\nVOWmInn5cPms8PLOKB1Tj77TifFDX42P3zSjcQ+Gzt8h2m9XB105BmvhWzKfnj3hX/+ChQvFt3/z\nzWLxT5yYfIsfIi1k4xpxNzqf/1C4WBtE9l51Njl3W6xOnAlTboU96PbwQBRvO4FymQh29nA128nK\nESvfWN7Ouw5nL4Fl0+DUR0T2PmPCYY2r34uUy73uzNvDYZNt+8ZXxq16OfoMT47sORvLck+TevU1\njbXwLXWHfv1g9mz45BNpr3jzzeLmuekmieE/4IDk7MftJ3dbldESoswEa89R4n9fOy/sW4fKVmwi\nVmtVSi07Szy4J3m9FKmx4gM7K/cSiFdKwaw74FaJAHJm10bDOYHceXDlUsd10CdfVazCt9Q9BgyA\nOXPE4r/3XnH1PPiglG24/vrkZe3GKgBmlLRXwTZn0xW3b935nEjoYLxJZBMeaYq4tTo6smZOrH0Y\nK77V0ZWzcJ3HE29dr0ERovezNZPVPc6V97YRfMJYhW+puxx/PHzwASxdKhO7EybAX/4i5Rpuuin5\nVTmhskJ0+7rBEaO+E9CxlW+0yBXn57EUr7vevwmV3PxF5bo6bozsPUaG68RHG2CiKW+3le4k2uDx\n9T/DBc/MXUms7GZLCKvwLZZjjoHXX4dVqyRh629/k8JsZ58tbp9+/eJvI1HcCtErhd8oYWP9x1Jm\n0ZRitM+jlUZ2Tr56TYw6J1m/nk6o2YhxAXnF/Du3Xb5VInic4Z8ht1e29x2Iu7yEmdA2NXwC5dEr\nfFq8SSQdt7YetrSCJSXYvFnr8eO1btZMSjYce6zWL7+sdSCQ/H3FSuH/YXW4HEJV14+2rrPMgmmy\n4i6d4PWZu+HInw6QEg2xGpA415t6RuUSEbFwym+28dGExEo51EGwpRUsln3kkEPEvXP77TB1qsT0\nX3CBVOv83e+kVHNN+vkNiRTwirb+19Nl3bzDIKdF0DL/J+wqD0e5LJsWtpLb94v03bsbhzutbfck\na7QqnO71TCNwr7aFsZqGn/V0eFteSWSWhFEyOKQGBQUFurCw0G8xLJZI9u6F998XxT9rljRc//Wv\n4ZproE8fKe1QE8TLLC0pEsU4bEJkr1WQcg/zHxTlbkoLGAXaaRAc3AMa5oiS//Tx8HLOcsyJyJCs\n4zHuK7P/WMdmqYRSaqnWuiDuctVR+EqpR4DTgQBQDFyqtf4x+N144HJgD3C91vrDeNuzCt+S8qxc\nCX/9q1j+27fD0UdL+8ULLoAmTWpXlhdHhn3YF02P/C7C5x607LUK198xA8DAcZXLNDiVsVsRR6O6\nA0MdazWYbBJV+NXyuQPDgAbB1w8BDwVfdwP+DTQCOiKDQf1427M+fEva8L//af3kk1ofcYT4+fff\nX+urr9b6iy9qT4ZEfPxaRy8dnIj/u6olkKvbSN2yT5CgDz9pLh2l1NnAuVrri4LWPVrrB4LffQjc\npbX+NNY2Crp21YXLlkHjxkmRyWKpcbSGRYtg8mSYPh1+/hkKCqQB+wUXJC+Zqzok03qOZvFbC91X\nErXwk1la4TLg/eDr1sAGx3cbg59VQik1RilVqJQqZPVqKXb1889JFMtiqUGUknj+f/wDNm8WP/8v\nv0itnoMPhtGjYf58GRj8IpllBaKVMLClC9KCuApfKTVbKfW1x+NMxzJ/AHYDL5qPPDblecZrrado\nrQu01gV06CCTYlbpW9KRZs0kU/ff/4bPPoOLL5b2iyeeKElc994L337rt5TVwyr2tCauwtdaD9Va\n9/B4vA2glBoNjAAu0mH/0EagrWMzbYDNcaVp3hyeeUY6GJ19tlX6lvREKYnemTwZvv9erP/27eHO\nO6FDBxg8ODzpa7HUItVy6SilTgHGAWdorR2dgZkBnK+UaqSU6gjkA0sS2ujll8Ozz4rSP/NM2Lmz\nOiJaLP6SnS2W/kcfwbp10oHrv/+VJi0HHwyjRsm5vnu335Ja6gDVDctcg0TimNqri7XWVwW/+wPi\n198N3KC1ft97K2EiwjKff16U/+DB0q80J2ef5bRYUgoz0fuPf8Brr8GPP4ryP/98GQB69aq52H5L\nRlIrcfjJplIc/gsviCXUvz+8+y7sv79vslksNcIvv8i5/eKLUrM/EICuXeGiiyTKpyYKuFkyDj+i\ndJLPxRdLx6KFC2HYMLGELJZMolEjOOcceOMN8fdPnizW/p13Qn4+HHusRP58/73fkloygNRW+CAp\n7NOnSwnbwYOhpMRviSyWmqFZMxgzBubNEz//ww+LxX/DDdC6NQwdKpU8t23zW1JLmpL6Ch8kYmfG\nDGlKPXAgbNrkt0QWS83Sti3ccgt8+SUsXy49eb/9VhK6WraUgIZXXqmZFo2WjCU9FD7AKadINMPG\njeLTLy72WyKLpXY4/HC45x5YvRqWLJHOXIWF4uM/6CC48EIxiH75xW9JLSlO+ih8gBNOkPC27dtF\n6X/1ld8SWSy1h1LQu7c0X9+wQVw/F18MM2eKxX/wwXIHMGcO7Nnjt7SWFCS9FD5InZJPPoH69WUA\nWLjQb4ksltqnXj1xbz79NHz3nUT4nH46vPqq+PrbtBHf/5Il/pZ1sKQU6afwQW5xFy4UX+bQoRLW\nZrHUVRo2hOHDJa7/hx8ktv+44+CppyTKJz9fon5WrvRbUovPpKfCB0lVX7AAevSQ2jvPP++3RBaL\n/zRuDCNHSpjnDz/Ac89Bx45w//1iKBUUwKOPyl2Bpc6RvgofIC9PfPpDhsBll0lbOnv7arEITZvC\npZdKQcKNG8X3D3DTTeLyOflkSfiykT51hvRW+CDZt++8I5mJf/iDtJ2zE1YWSySHHAI33ijRPStW\nwPjxsGqVlHI4+GAZGObNk3aOlowl/RU+SI/Rf/wDbr1V/Ja/+hVUVMRfz2Kpixx2GNx3H6xdK7X6\nf/1reP11GDQIOneGu+6C9ev9ltJSA2SGwgeJWnjoIXjiCbH4Bw0SH6bFYvGmXj2JdHv2WSndMG2a\n1O655x7x+w8dCi+/bMuUZxCZo/AN114rTSf+8x/o29dGJlgsiZCdLW7RWbPEur/7bkluvPBCKetw\n442S8WtJazJP4YMkocybJ5NRxx0Hc+f6LZHFkj60aydhnMXFMgAMHQp//St07y53BC+/bLN605TM\nVPggHYc++wxatZJKmzZs02KpGvXqibJ/9VWJ8nnoIenbe+GFMij84Q+S8WtJG1K7Hn4y+PFHOO88\niUxYsQKaNEnu9i2WusTevWL1P/mkzJX16iWRPxZfScsGKEqpEsCvLs8tgK0+7dsv7DHXDewxZz7t\ntdZ58RZKKYXvJ0qpwkRGyEzCHnPdwB6zxZC5PnyLxWKxRGAVvsVisdQRrMIPM8VvAXzAHnPdwB6z\nBbA+fIvFYqkzWAvfYrFY6ghW4VssFksdoU4rfKXUI0qplUqpr5RSbyqlDnR8N14ptUYptUopdbKf\nciYTpdRIpdQ3Sqm9SqkC13cZecwASqlTgse1Ril1m9/y1BRKqeeUUj8opb52fJarlJqllCoKPjfz\nU8ZkopRqq5Saq5RaETyvxwY/z9hjrg51WuEDs4AeWusjgdXAeAClVDfgfKA7cArwpFKqvm9SJpev\ngV8BHzs/zORjDh7HX4FTgW7ABcHjzUT+jvx/Tm4D5mit84E5wfeZwm7gZq314UBf4Jrgf5vJx7zP\n1GmFr7WeqbXeHXy7GGgTfH0m8IrW+het9TpgDdDHDxmTjdZ6hdZ6lcdXGXvMyHGs0Vqv1VoHgFeQ\n4804tNYfA2Wuj88EpgZfTwXOqlWhahCt9Xf/397du0YRxGEc/z74ksbWlxAVU+QPsLcQFBQRwUKw\nC1hZ2gleYWUrgrV2QRAUvSaNnY0vIAGLNFYSDCkE0VZ8LHbFI1y80/Ny7MzzqYaZ2WMeDn7czt7u\n2n7Xtr8B68ACBWeeRNUFf5trwGrbXgAGnwq10faVrOTMJWcbx2Hbm9AUSODQjNczFZJOACeB11SS\n+W/tnfUCpk3SC+DIkKGe7eftnB7NqeHKr8OGzO/M/1fHyTzssCF9nck8QsnZApB0AHgC3LD9VRr2\nlUfxBd/22T+NS1oGLgJn/PumhA3g2MC0o8Cn6azw/xuVeQedzjxCydnGsSVp3vampHmgqFfBSdpH\nU+xXbD9tu4vO/K+q3tKRdB64CVyyPfgS3D5wVdKcpEVgCXgzizXuopIzvwWWJC1K2k9zcbo/4zXt\npj6w3LaXgZ3O8jpHzU/5B8C67bsDQ8VmnkTVd9pK+gDMAZ/brle2r7djPZp9/e80p4mrwz+lWyRd\nBu4DB4EvwJrtc+1YkZkBJF0A7gF7gIe278x4SVMh6RFwmubxwFvAbeAZ8Bg4DnwErtjefmG3kySd\nAl4C74Efbfctmn38IjNPouqCHxFRk6q3dCIiapKCHxFRiRT8iIhKpOBHRFQiBT8iohIp+BERlUjB\nj4ioxE8rRIiDFetYtgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ecdf42d160>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-1.2908892881068699, 0.06563261448389339, 0.19659674176761507, 0.00803495373549107, 0.015065396638491895, 0.008146061450369876, -0.0006577304715118114, -0.0006010514387000703, -0.0008964076525334598, -0.0004312904062460984]\n"
     ]
    }
   ],
   "source": [
    "# 定义等高线高度函数\n",
    "def f(x,y,w):\n",
    "    return w[0]+w[1]*x+w[2]*y+w[3]*x*y+w[4]*(x**2)+w[5]*(y**2)+w[6]*(x**3)+w[7]*(x**2)*y+w[8]*x*(y**2)+w[9]*y**3\n",
    "\n",
    "# 数据数目\n",
    "m = 2000\n",
    "#定义范围\n",
    "t=25\n",
    "# 定义x, y\n",
    "x = np.linspace(-t, t, m)\n",
    "y = np.linspace(-t, t, m)\n",
    "\n",
    "# 生成网格数据\n",
    "X, Y = np.meshgrid(x, y)\n",
    "\n",
    "\n",
    "w=list((sol['x']))\n",
    "\n",
    "\n",
    "plt.scatter(X1,Y1,s=1)\n",
    "plt.scatter(X2,Y2,s=1)\n",
    "plt.contour(X, Y, f(X, Y,w), 1, colors = 'red')\n",
    "plt.title('featuretransform,sep=-5,algorithm1')\n",
    "plt.show()\n",
    "print(w)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "效果还是相当不错的，最后使用算法2\n",
    "\n",
    "(6)特征转换后，算法2，sep=-5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     pcost       dcost       gap    pres   dres   k/t\n",
      " 0:  9.8921e+00  1.1827e+03  4e+03  2e+00  1e+05  1e+00\n",
      " 1:  1.2573e+01  1.7458e+02  3e+02  2e-01  2e+04  1e+00\n",
      " 2:  5.1100e+00  6.5809e+01  1e+02  9e-02  7e+03  4e-01\n",
      " 3:  2.0670e+00  2.6862e+01  5e+01  4e-02  3e+03  2e-01\n",
      " 4:  1.1901e-01  2.2473e+00  4e+00  3e-03  3e+02  1e-02\n",
      " 5:  1.2202e-03  2.2998e-02  4e-02  3e-05  3e+00  1e-04\n",
      " 6:  1.2202e-05  2.2998e-04  4e-04  3e-07  3e-02  1e-06\n",
      " 7:  1.2202e-07  2.2998e-06  4e-06  3e-09  3e-04  1e-08\n",
      " 8:  1.2202e-09  2.2998e-08  4e-08  3e-11  3e-06  1e-10\n",
      " 9:  1.2202e-11  2.2998e-10  4e-10  3e-13  3e-08  1e-12\n",
      "Optimal solution found.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\ncOCbmSXiHRRtQ1PzoKaoAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ecdf42d0f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#根据之前所述构造矩阵\n",
    "a1=np.concatenate((A,(-1)*np.eye(n)),axis=1)\n",
    "a2=np.concatenate((np.zeros([n,10]),(-1)*np.eye(n)),axis=1)\n",
    "\n",
    "A1=np.concatenate((a1,a2))\n",
    "c1=np.array([0.0]*10+[1.0]*1000)\n",
    "b1=np.array([-1.0]*1000+[0.0]*1000)\n",
    "\n",
    "#带入算法求解\n",
    "c1=matrix(c1)\n",
    "A1=matrix(A1)\n",
    "b1=matrix(b1)\n",
    "\n",
    "sol1 = solvers.lp(c1,A1,b1)\n",
    "\n",
    "#作图\n",
    "w=list((sol1['x']))\n",
    "\n",
    "# 定义x, y\n",
    "x = np.linspace(-t, t, m)\n",
    "y = np.linspace(-t, t, m)\n",
    "\n",
    "# 生成网格数据\n",
    "X, Y = np.meshgrid(x, y)\n",
    "\n",
    "\n",
    "plt.scatter(X1,Y1,s=1)\n",
    "plt.scatter(X2,Y2,s=1)\n",
    "plt.contour(X, Y, f(X, Y,w), 1, colors = 'red')\n",
    "plt.title('featuretransform,sep=-5,algorithm2')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "算法2的效果更加的好，因为它限制了距离。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 3.8 (Page 111)\n",
    "\n",
    "For linear regression, the out of sample error is \n",
    "$$\n",
    "E_{out} (h) =E [(h(x) - y)^2]\n",
    "$$\n",
    " Show that among all hypotheses, the one that minimizes $E_{out} (h)$ is given by\n",
    "$$\n",
    "h^* (x) = E[y | x]\n",
    "$$\n",
    "The function $h^*$ can be treated as a deterministic target function, in which case we can write $y = h^* (x) + \\epsilon(x)$ where $\\epsilon(x)$ is an (input dependent) noise variable. Show that $\\epsilon(x)$ has expected value zero.  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这题其实是统计学习里一个比较常见的结论。\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E_{out} (h) &=E [(h(x) - y)^2]\n",
    "\\\\&=E [(h(x) -E[y | x]+E[y | x]-y)^2]\n",
    "\\\\&=E[(h(x) -E[y | x])^2+(E[y | x]-y)^2+2(h(x) -E[y | x])(E[y | x]-y)]\n",
    "\\\\&=E[(h(x) -E[y | x])^2]+E[(E[y | x]-y)^2]+2E[(h(x) -E[y | x])(E[y | x]-y)]\n",
    "\\\\&=E[(h(x) -h^*(x))^2]+E[(h^*(x)-y)^2]+2E[(h(x) -h^*(x))(h^*(x)-y)]\n",
    "\\end{aligned}\n",
    "$$\n",
    "下面分析$E[(h(x) -h^*(x))(h^*(x)-y)]$，注意$E(E(y|x))=E(y)$，因此\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E[(h(x) -h^*(x))(h^*(x)-y)]&=E[E[(h(x) -h^*(x))(h^*(x)-y)|x]]\n",
    "\\\\&=E[(h(x) -h^*(x))E[(h^*(x)-y)|x]]\n",
    "\\end{aligned}\n",
    "$$\n",
    "来分析下$E[(h^*(x)-y)|x]$\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E[(h^*(x)-y)|x]&=E(h^*(x)|x)-E(y|x)\n",
    "\\\\&=h^*(x)-h^*(x)\n",
    "\\\\&=0\n",
    "\\end{aligned}\n",
    "$$\n",
    "所以\n",
    "$$\n",
    "E[(h(x) -h^*(x))(h^*(x)-y)]=E[(h(x) -h^*(x))E[(h^*(x)-y)|x]]=E[(h(x) -h^*(x))\\times 0]=0\n",
    "$$\n",
    "综上\n",
    "$$\n",
    "E_{out} (h)=E[(h(x) -h^*(x))^2]+E[(h^*(x)-y)^2]\\ge E[(h^*(x)-y)^2]\n",
    "\\\\当且仅当h(x)=h^*(x)时等号成立\n",
    "$$\n",
    "接着证明另一个结论，首先$y=y-h^*(x)+h^*(x)= h^* (x) + \\epsilon(x)$，计算$\\epsilon(x)$的数学期望，注意$E(E(y|x))=E(y)$\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E(\\epsilon(x))&=E[E(\\epsilon(x)|x)]\n",
    "\\\\&=E[E[(y-h^*(x))|x]]\n",
    "\\\\&=E[E(y|x)-E(h^*(x)|x)]\n",
    "\\\\&=E[h^*(x)-h^*(x)]\n",
    "\\\\&=0\n",
    "\\end{aligned}\n",
    "$$\n",
    "所以$\\epsilon(x)$满足条件，因此结论成立。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 3.9 (Page 112)\n",
    "\n",
    "Assuming that $X^TX$ is invertible, show by direct comparison with Equation (3.4) that $E_{in}(w)$ can be written as \n",
    "$$\n",
    "E_{in}(w) = (w - (X^TX)^{-1} X^Ty)^T(X^TX) (w - (X^TX)^{-1}X^Ty) + y^T(I - X(X^TX)^{-1}X^T)y\n",
    "$$\n",
    "Use this expression for $E_{in}$ to obtain $w_{lin}$· What is the in sample error? [Hint: The matrix $X^TX$ is positive definite.]    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "回顾等式3.4，这里把$\\frac 1N$这个常数略去\n",
    "$$\n",
    "E_{in}(w) ={w^TX^TXw-2w^TX^Ty+y^Ty}\n",
    "$$\n",
    "令$ u=(X^TX)^{-1} X^Ty,v=w-u$，那么$w=v+u$，所以\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E_{in}(w)& ={w^TX^TXw-2w^TX^Ty+y^Ty}\n",
    "\\\\&=(v+u)^TX^TX(v+u)-2(v+u)^TX^Ty+y^Ty\n",
    "\\\\&=v^TX^TXv+u^TX^TXv+v^TX^TXu+u^TX^TXu-2v^TX^Ty-2u^TX^Ty+y^Ty\n",
    "\\\\&=v^TX^TXv+2v^TX^TXu-2v^TX^Ty+u^TX^TXu-2u^TX^Ty+y^Ty\n",
    "\\end{aligned}\n",
    "$$\n",
    "先看下$2v^TX^TXu-2v^TX^Ty$，将$ u=(X^TX)^{-1} X^Ty$带入\n",
    "$$\n",
    "\\begin{aligned}\n",
    "2v^TX^TXu-2v^TX^Ty&=2v^T(X^TXu-y)\n",
    "\\\\&=2v^T(X^TX (X^TX)^{-1} X^Ty-X^Ty)\n",
    "\\\\&=2v^T( X^Ty-X^Ty)\n",
    "\\\\&=0\n",
    "\\end{aligned}\n",
    "$$\n",
    "再看下$u^TX^TXu-2u^TX^Ty$，将$ u=(X^TX)^{-1} X^Ty$带入\n",
    "$$\n",
    "\\begin{aligned}\n",
    "u^TX^TXu-2u^TX^Ty&=y^TX(X^TX)^{-1}(X^TX)(X^TX)^{-1} X^Ty-2y^TX(X^TX)^{-1}X^Ty\n",
    "\\\\&=y^TX^T(X^TX)^{-1}Xy-2y^TX(X^TX)^{-1}X^Ty\n",
    "\\\\&=-y^TX(X^TX)^{-1}X^Ty\n",
    "\\end{aligned}\n",
    "$$\n",
    "所以\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E_{in}(w)& =v^TX^TXv-y^TX(X^TX)^{-1}X^Ty+y^Ty\n",
    "\\\\&= (w - (X^TX)^{-1} X^Ty)^T(X^TX) (w - (X^TX)^{-1}X^Ty) + y^T(I - X(X^TX)^{-1}X^T)y\n",
    "\\end{aligned}\n",
    "$$\n",
    "接着从这个式子来分析最优解，因为$X^TX$半正定，所以\n",
    "$$\n",
    "E_{in}(w)\\ge y^T(I - X(X^TX)^{-1}X^T)y\n",
    "\\\\当且仅当w - (X^TX)^{-1} X^Ty=0时等号成立\n",
    "\\\\即w_{lin}=(X^TX)^{-1} X^Ty\n",
    "$$\n",
    "可以看到和之前求导的结果一样，显然求导要快很多。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 3.10 (Page 112)\n",
    "\n",
    "Exercise 3.3 studied some properties of the hat matrix $H = X(X^TX)^{-1}X^T$, where $X$ is a $N$ by $d + 1$ matrix, and $X^TX $ is invertible. Show the following additional properties. \n",
    "\n",
    "(a) Every eigenvalue of $H$ is either $0$ or $1$. [Hint: Exercise 3.3(b).] \n",
    "\n",
    "(b) Show that the trace of a symmetric matrix equals the sum of its eigenvalues. [Hint: Use the spectral theorem and the cyclic property of the trace. Note that the same result holds for non-symmetric matrices, but is a little harder to prove.] \n",
    "\n",
    "(c) How many eigenvalues of $H$ are $1$? What is the rank of $H$? [Hint: Exercise 3.3(d).]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)由3.3(b)我们知道$H^K=H$，所以对于$H$的任意特征值$\\lambda$\n",
    "$$\n",
    "\\lambda^K=\\lambda\n",
    "\\\\\\lambda=0或1\n",
    "$$\n",
    "(b)直接对一般的矩阵证明结论，利用$标准型Jordan标准型$的结论即可\n",
    "$$\n",
    "任意方阵A可以相似于J，A = P J P^{-1}，其中J可以表示为如下形式\n",
    "\\\\J= diag( J_1, J_2, \\dots,J_{k})\n",
    "\\\\J_ {i}  = \\begin{bmatrix}   \\lambda _i & 1 & 0 & \\dots  & 0\\\\ 0 &  \\lambda _i & 1& \\dots & 0\\\\  0&0 &  \\lambda _i  &  \\dots  & 0\\\\     \\dots &     \\dots & \\dots & \\dots &  1\\\\     0 & 0 & 0 & \\dots     & \\lambda _i   \\end{bmatrix} \\in R^{n_i * n_i}\n",
    "$$\n",
    "更具体的部分可以参考[维基百科](https://zh.wikipedia.org/wiki/%E8%8B%A5%E5%B0%94%E5%BD%93%E6%A0%87%E5%87%86%E5%9E%8B)\n",
    "\n",
    "下面仅从$trace$的角度利用这个结论\n",
    "$$\n",
    "\\begin{aligned}\n",
    "trace(A)&=trace(P J P^{-1})\n",
    "\\\\&=trace(P^{-1}P J )\n",
    "\\\\&=trace(J)\n",
    "\\\\&=trace( diag( J_1, J_2, \\dots,J_{k}))\n",
    "\\\\&=\\sum_{i=1}^ktrace(J_i)\n",
    "\\end{aligned}\n",
    "$$\n",
    "由特征值的性质我们知道$\\lambda _i$为$A$的特征值，而$\\sum_{i=1}^ktrace(J_i)$即为特征值之和，所以矩阵的$trace$等于特征值之和\n",
    "\n",
    "(c)由3.3(d),$特征值之和trace(H)=d+1=特征值之和$，因为特征值只能取0或1，所以特征值中一共有$d+1$个1。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 3.11 (Page 112)\n",
    "\n",
    "Consider the linear regression problem setup in Exercise 3.4, where the data comes from a genuine linear relationship with added noise. The noise for the different data points is assumed to be iid with zero mean and variance $\\sigma^2$ . Assume that the 2nd moment matrix $\\sum = E_x[xx^T]$ is non-singular. Follow the steps below to show that, with high probability, the out-of-sample error on average is \n",
    "$$\n",
    "E_{out} (w_{lin}) = \\sigma^2 (1  +\\frac{ d + l}{N}+O (\\frac1N)  )\n",
    "$$\n",
    "(a) For a test point $x$, show that the error $y - g(x)$ is \n",
    "$$\n",
    "\\epsilon^{'} - x^T(X^TX) ^{-1}X^T\\epsilon\n",
    "$$\n",
    "where $\\epsilon^{'} $ is the noise realization for the test point and $\\epsilon$ is the vector of noise realizations on the data . \n",
    "\n",
    "(b) Take the expectation with respect to the test point, i.e., $x$ and $\\epsilon^{'}$ , to obtain an expression for $E_{out}$.Show that \n",
    "$$\n",
    "E_{out} = \\sigma^2 + trace (\\sum(X^TX)^ {-1}X^T\\epsilon \\epsilon ^TX(X^TX) ^{-1})\n",
    "$$\n",
    " [Hints: a = trace(a) for any scalar a; trace(AB) = trace(BA); expectation and trace commute.] \n",
    "\n",
    "(c) What is $E_{\\epsilon} [\\epsilon \\epsilon^T]$?    \n",
    "\n",
    "(d) Take the expectation with respect to $\\epsilon$ to show that, on average, \n",
    "$$\n",
    "E_{out} = \\sigma^2 + \\frac{\\sigma^2}{N} trace (\\sum(\\frac 1N X^TX)^{-1} )\n",
    "$$\n",
    " Note that :$\\frac 1N X^TX =\\frac 1N \\sum_{n=1}^{N}x_nx_n^T $ is an $N$ sample estimate of $\\sum$. So :$\\frac 1N X^TX\\approx \\sum$ . If :$\\frac 1N X^TX=\\sum$, then what is $E_{out}$ on average? \n",
    "\n",
    "(e) Show that (after taking the expectation over the data noise) with high probability, \n",
    "$$\n",
    "E_{out} = \\sigma^2 (1  +\\frac{ d + 1}{N}+O (\\frac1N)  )\n",
    "$$\n",
    " [Hint: By the law of large numbers : $\\frac 1N X^TX$ converges in probability to $\\sum$, and so by continuity of the inverse at $\\sum$, $(\\frac 1N X^TX)^{-1}$ converges in probability to $\\sum^{-1}$.]    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这题实际上是对Exercise 3.4的推广，注意这里$X$为训练数据，$x$为测试数据，为了方便区分，我将$x$的噪音记录为$\\epsilon^{'}$，原题为$\\epsilon$。\n",
    "\n",
    "(a)同Exercise 3.4，记$y=[y_1...y_N]^T,X=[x_1...x_N]^T$，注意题目中给出$\\epsilon=[\\epsilon_1,\\epsilon_2,...,\\epsilon_N]^T$\n",
    "\n",
    "那么\n",
    "$$\n",
    "y=Xw^*+\\epsilon\n",
    "$$\n",
    "我们知道$w_{lin}=(X^TX)^{-1}X^Ty$\n",
    "\n",
    "那么\n",
    "$$\n",
    "\\begin{aligned}\n",
    "g(x)&=x^Tw_{lin}\n",
    "\\\\&=x^T(X^TX)^{-1}X^Ty\n",
    "\\\\&=x^T(X^TX)^{-1}X^T(Xw^* + \\epsilon)\n",
    "\\\\&=x^T(X^TX)^{-1}X^TXw^*+X(X^TX)^{-1}X^T\\epsilon\n",
    "\\\\&=x^Tw^*+x^T(X^TX)^{-1}X^T\\epsilon\n",
    "\\end{aligned}\n",
    "$$\n",
    "从而\n",
    "$$\n",
    "\\begin{aligned}\n",
    "y - g(x)&=x^Tw^*+\\epsilon^{'}-(x^Tw^*+x^T(X^TX)^{-1}X^T\\epsilon)\n",
    "\\\\&=\\epsilon^{'}-x^T(X^TX)^{-1}X^T\\epsilon\n",
    "\\end{aligned}\n",
    "$$\n",
    "(b)利用定义计算即可，注意这题是关于$\\epsilon^{'},x$求期望\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E_{out}&=E(||y - g(x)||^2)\n",
    "\\\\&=E(||\\epsilon^{'}-x^T(X^TX)^{-1}X^T\\epsilon||^2)\n",
    "\\\\&=E((\\epsilon^{'}-x^T(X^TX)^{-1}X^T\\epsilon)^T(\\epsilon^{'}-x^T(X^TX)^{-1}X^T\\epsilon))\n",
    "\\\\&=E[(-\\epsilon^TX(X^TX)^{-1}x+\\epsilon^{'T})(\\epsilon^{'}-x^T(X^TX)^{-1}X^T\\epsilon)]\n",
    "\\\\&=E[-\\epsilon^TX(X^TX)^{-1}x\\epsilon^{'}+\\epsilon^{'T}\\epsilon^{'}\n",
    "+\\epsilon^TX(X^TX)^{-1}xx^T(X^TX)^{-1}X^T\\epsilon-\\epsilon^{'T}x^T(X^TX)^{-1}X^T\\epsilon)](注意\\epsilon^{'}\\backsim N(0,\\sigma^2))\n",
    "\\\\&=-2E[\\epsilon^TX(X^TX)^{-1}x\\epsilon^{'}]+E((\\epsilon^{'}))^2+trace(E(\\epsilon^TX(X^TX)^{-1}xx^T(X^TX)^{-1}X^T\\epsilon))\n",
    "\\\\&=-2E[\\epsilon^TX(X^TX)^{-1}x]E(\\epsilon^{'})+\\sigma^2+E[trace(\\epsilon^TX(X^TX)^{-1}xx^T(X^TX)^{-1}X^T\\epsilon)](注意trace(AB)=trace(BA),E(\\epsilon^{'})=0)\n",
    "\\\\&=\\sigma^2+E[trace(xx^T(X^TX)^{-1}X^T\\epsilon\\epsilon^TX(X^TX)^{-1})]\n",
    "\\\\&=\\sigma^2+trace(E(xx^T(X^TX)^{-1}X^T\\epsilon\\epsilon^TX(X^TX)^{-1}))\n",
    "\\\\&=\\sigma^2+trace(E(xx^T)(X^TX)^{-1}X^T\\epsilon\\epsilon^TX(X^TX)^{-1})\n",
    "\\\\&=\\sigma^2+trace(\\sum (X^TX)^{-1}X^T\\epsilon\\epsilon^TX(X^TX)^{-1})(\\sum = E_x[xx^T])\n",
    "\\end{aligned}\n",
    "$$\n",
    "(c)直接计算\n",
    "$$\n",
    "注意E(\\epsilon_i\\epsilon_j)=\\begin{cases}\n",
    "\n",
    "\\sigma^2(i=j)\n",
    "\n",
    "\\\\0(i\\neq j)\n",
    "\n",
    "\\end{cases}\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E_{\\epsilon} [\\epsilon \\epsilon^T]&=E_{\\epsilon} [(\\epsilon_1,\\epsilon_2,...,\\epsilon_N) (\\epsilon_1,\\epsilon_2,...,\\epsilon_N)^T]\\\\\n",
    "&=E_{\\epsilon} \n",
    "\\left(\n",
    "\\begin{matrix}\n",
    "\\epsilon_1\\epsilon_1&\\epsilon_1\\epsilon_2&...&\\epsilon_1\\epsilon_N\\\\\n",
    "\\epsilon_2\\epsilon_1&\\epsilon_2\\epsilon_2&...&\\epsilon_2\\epsilon_N\\\\\n",
    "...&...&...&...\\\\\n",
    "\\epsilon_N\\epsilon_1&\\epsilon_N\\epsilon_2&...&\\epsilon_N\\epsilon_N\n",
    "\\end{matrix}\n",
    "\\right)\\\\\n",
    "&=\n",
    "\\left(\n",
    "\\begin{matrix}\n",
    "E(\\epsilon_1\\epsilon_1)&E(\\epsilon_1\\epsilon_2)&...&E(\\epsilon_1\\epsilon_N)\\\\\n",
    "E(\\epsilon_2\\epsilon_1)&E(\\epsilon_2\\epsilon_2)&...&E(\\epsilon_2\\epsilon_N)\\\\\n",
    "...&...&...&...\\\\\n",
    "E(\\epsilon_N\\epsilon_1)&E(\\epsilon_N\\epsilon_2)&...&E(\\epsilon_N\\epsilon_N)\n",
    "\\end{matrix}\n",
    "\\right)\\\\\n",
    "&=\\sigma^2I\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "(d)利用c，对b计算的$E_{out}$关于$\\epsilon$取数学期望可得\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E_{out}^{'}&=E_{\\epsilon}(E_{out})\n",
    "\\\\&=E_{\\epsilon}[\\sigma^2+trace(\\sum (X^TX)^{-1}X^T\\epsilon\\epsilon^TX(X^TX)^{-1})]\n",
    "\\\\&=\\sigma^2+trace[E_{\\epsilon}(\\sum (X^TX)^{-1}X^T\\epsilon\\epsilon^TX(X^TX)^{-1})]\n",
    "\\\\&=\\sigma^2+\\sigma^2 trace[E_{\\epsilon}(\\sum (X^TX)^{-1}X^TX(X^TX)^{-1})]\n",
    "\\\\&=\\sigma^2+\\sigma^2 trace[E_{\\epsilon}(\\sum (X^TX)^{-1})]\n",
    "\\\\&= \\sigma^2 + \\frac{\\sigma^2}{N} trace (\\sum(\\frac 1N X^TX)^{-1} )\n",
    "\\end{aligned}\n",
    "$$\n",
    "由计算我们知道$\\frac 1N X^TX =\\frac 1N \\sum_{n=1}^{N}x_nx_n^T $是$\\sum$的极大似然估计，因此$\\frac 1N X^TX\\approx \\sum$。如果$\\frac 1N X^TX=\\sum$\n",
    "$$\n",
    "E_{out}^{'}= \\sigma^2 + \\frac{\\sigma^2}{N} trace ( I_{d+1})= \\sigma^2 (1  +\\frac{ d + 1}{N})\n",
    "$$\n",
    "(e)由大数定律我们我知道$\\frac 1N X^TX$依概率收敛于$\\sum$，所以$(\\frac 1N X^TX)^{-1}$依概率收敛于$\\sum^{-1}$，从而有很高的的概率\n",
    "$$\n",
    "\\sum(\\frac 1N X^TX)^{-1}=\\sum({\\sum}^{-1}+S)=I_{d+1}+ \\sum S\n",
    "$$\n",
    "其中$S$为一个矩阵，那么有很高的概率\n",
    "$$\n",
    "trace (\\sum(\\frac 1N X^TX)^{-1} )= \\sigma^2 ({ d + 1}+O (1)  )\n",
    "$$\n",
    "从而有很高的概率\n",
    "$$\n",
    "E_{out} = \\sigma^2 + \\frac{\\sigma^2}{N} trace (\\sum(\\frac 1N X^TX)^{-1} )= \\sigma^2 (1  +\\frac{ d + 1}{N}+O (\\frac1N)  )\n",
    "$$\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 3.12 (Page 113)\n",
    "\n",
    "In linear regression , the in sample predictions are given by $\\hat y = Hy$, where $H = X(X^TX)^{-1}X^T$. Show that $H$ is a projection matrix, i.e. $H^2 = H$. So $\\hat y$ is the projection of $y$ onto some space. What is this space?    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "回忆Exercies 3.3可知，$H^K=H$。关于投影可以参考林老师的课件\n",
    "\n",
    "![](https://github.com/Doraemonzzz/Learning-from-data/blob/master/photo/Chapter3/Problem3.12.png?raw=true)\n",
    "\n",
    "这里简单说明这几个结论。$\\hat y = Hy=X(X^TX)^{-1}X^Ty=Xw_{lin}$，由线性代数知识我们知道$\\hat y$属于$X$的列张成的子空间。接着考虑$y-\\hat y$，注意$H$为对称矩阵\n",
    "$$\n",
    "\\hat y^T(y-\\hat y)=y^TH^T(I-H)y=y^T(H^T-H^TH)y=y^T(H-H^2)y=0\n",
    "$$\n",
    "所以$y-\\hat y$垂直于$\\hat y$。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 3.13 (Page 113)\n",
    "\n",
    "This problem creates a linear regression algorithm from a good algorithm for linear classification. As illustrated , the idea is to take the original data and shift it in one direction to get the +1 data points; then , shift it in the opposite direction to get the -1 data points.    \n",
    "\n",
    "![](https://github.com/Doraemonzzz/Learning-from-data/blob/master/photo/Chapter3/Problem3.13.png?raw=true)\n",
    "\n",
    "More generally, The data $(x_n , y_n)$ can be viewed as data points in $R^{d+1}$ by treating the $y$ value as the $(d + 1)$ th coordinate.    \n",
    "\n",
    "Now, construct positive and negative points    \n",
    "$$\n",
    "D_+= (x_1 , y_1) + a, . . . , (x_N, y_N) + a\n",
    "\\\\D_-= (x_1 , y_1) - a, . . . , (x_N, y_N) - a\n",
    "$$\n",
    "where $a$ is a perturbation parameter. You can now use the linear programming algorithm in Problem 3.6 to separate $D_+ $    from $D_-$ . The resulting separating hyperplane can be used as the regression 'fit' to the original data.    \n",
    "\n",
    "(a) How many weights are learned in the classification problem? How many weights are needed for the linear fit in the regression problem?\n",
    "\n",
    "(b) The linear fit requires weights $w$, where $h(x) = w^Tx$. Suppose the weights returned by solving the classification problem are $w_{class}$ . Derive an expression for $w$ as a function of $w_{class}$ · \n",
    "\n",
    "(c) Generate a data set $y_n = x_n^2 + \\sigma \\epsilon_n$ with $N = 50$, where $x_n$ is uniform on $[0, 1]$ and $\\epsilon_n$ is zero mean Gaussian noise; set $\\sigma = 0.1$. Plot $D_+$ and $D_-$ for $a = [0,0.1]^T $. \n",
    "\n",
    "(d) Give comparisons of the resulting fits from running the classification approach and the analytic pseudo-inverse algorithm for linear regression .    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "题目的意思是对于回归问题的点$(x_n , y_n)$，有个一个偏移量$a$，构造两个点集$D_+= (x_1 , y_1) + a, . . . , (x_N, y_N) + a,D_-= (x_1 , y_1) - a, . . . , (x_N, y_N) - a$，我们对于这两个点集作分类问题，利用分类问题得到的参数来做回归。\n",
    "\n",
    "(a)由题设知$x_n\\in R^d$，所以$(x_n,y_n)=(x_n^1...x_n^d,y_n)\\in R^{d+1}$，注意学习的时候还要加一个$1$分量 ，数据变为$(1,x_n,y_n)=(1,x_n^1...x_n^d,y_n)\\in R^{d+1}$,从而对于分类问题我们需要学习$d+2$个权重$w=(w_0,...w_{d+1},w_{d+2})$。\n",
    "\n",
    "计算完$w$之后，我们要回到原来的回归问题，这时候只需要$d+1$个即可(不取$w$的最后一个分量$w_{d+2}$)，$w^{'}=(w_0,...w_{d+1})$\n",
    "\n",
    "(b)由(a)我们知道\n",
    "$$\n",
    "w=(w_{class}^1,w_{class}^2...,w_{class}^{d+1})\n",
    "$$\n",
    "\n",
    "(c)编程处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ec800ae7b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pylab as plt\n",
    "\n",
    "def generate(n,delta):\n",
    "    X=[]\n",
    "    Y=[]\n",
    "    data=[]\n",
    "    for i in range(n):\n",
    "        x=np.random.random()\n",
    "        t=np.random.normal(0,1)\n",
    "        y=x*x+delta*t\n",
    "        data.append([x,y])\n",
    "        X.append(x)\n",
    "        Y.append(y)\n",
    "    return X,Y,data\n",
    "\n",
    "n=50\n",
    "delta=0.1\n",
    "\n",
    "X,Y,data=generate(n,delta)\n",
    "\n",
    "a=np.array([0,0.1])\n",
    "D1=np.array(data)+a\n",
    "D2=np.array(data)-a\n",
    "\n",
    "X1=D1[:,0]\n",
    "Y1=D1[:,1]\n",
    "X2=D2[:,0]\n",
    "Y2=D2[:,1]\n",
    "\n",
    "plt.scatter(X1,Y1,label='+a')\n",
    "plt.scatter(X2,Y2,label='-a')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(c)分别使用线性回归的公式以及这题介绍的方法求解并进行比较。先看下线性回归的效果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n+IuIZKH/BULKFNpTfXDpAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ec800640f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from numpy.linalg import inv\n",
    "\n",
    "X1=np.array([[1,i] for i in X])\n",
    "Y=np.array(Y)\n",
    "w1=inv(X1.T.dot(X1)).dot(X1.T).dot(Y)\n",
    "\n",
    "x=[0,1]\n",
    "y=[w1[0]+w1[1]*i for i in x]\n",
    "\n",
    "plt.scatter(X,Y)\n",
    "plt.plot(x,y,'r')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "再看下这题介绍的方法。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#构造数据\n",
    "a=np.array([0,0.1])\n",
    "data=np.array(data)\n",
    "D=[]\n",
    "for i in data:\n",
    "    t1=i+a\n",
    "    t1=np.array([1]+list(t1)+[1])\n",
    "    t2=i-a\n",
    "    t2=np.array([1]+list(t2)+[-1])\n",
    "    D.append(t1)\n",
    "    D.append(t2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接着利用Problem 3.6介绍的优化方法求解该分类问题。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     pcost       dcost       gap    pres   dres   k/t\n",
      " 0:  2.8069e+01  1.5849e+02  7e+02  3e+00  3e+00  1e+00\n",
      " 1:  4.5327e+01  6.7513e+01  6e+01  4e-01  5e-01  1e+00\n",
      " 2:  4.4395e+01  4.9406e+01  1e+01  1e-01  1e-01  3e-01\n",
      " 3:  4.4309e+01  4.4951e+01  1e+00  1e-02  1e-02  4e-02\n",
      " 4:  4.4360e+01  4.4547e+01  4e-01  4e-03  4e-03  8e-03\n",
      " 5:  4.4370e+01  4.4419e+01  1e-01  1e-03  1e-03  1e-03\n",
      " 6:  4.4377e+01  4.4381e+01  9e-03  8e-05  9e-05  1e-04\n",
      " 7:  4.4378e+01  4.4378e+01  9e-05  8e-07  9e-07  1e-06\n",
      " 8:  4.4378e+01  4.4378e+01  9e-07  8e-09  9e-09  1e-08\n",
      "Optimal solution found.\n"
     ]
    }
   ],
   "source": [
    "from cvxopt import matrix, solvers\n",
    "\n",
    "finaldata=[]\n",
    "for i in D:\n",
    "    temp=list(i[:-1]*i[-1])\n",
    "    finaldata.append(temp)\n",
    "\n",
    "A=np.array(finaldata)*(-1)\n",
    "\n",
    "n=len(finaldata)\n",
    "m=len(finaldata[0])\n",
    "    \n",
    "#根据之前所述构造矩阵\n",
    "a1=np.concatenate((A,(-1)*np.eye(n)),axis=1)\n",
    "a2=np.concatenate((np.zeros([n,m]),(-1)*np.eye(n)),axis=1)\n",
    "\n",
    "A1=np.concatenate((a1,a2))\n",
    "c1=np.array([0.0]*m+[1.0]*n)\n",
    "b1=np.array([-1.0]*n+[0.0]*n)\n",
    "\n",
    "#带入算法求解\n",
    "c1=matrix(c1)\n",
    "A1=matrix(A1)\n",
    "b1=matrix(b1)\n",
    "\n",
    "sol1 = solvers.lp(c1,A1,b1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n+IuIZKH/BULKFNpTfXDpAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ec80064e10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "w2=list(sol1['x'])\n",
    "\n",
    "x1=[0,1]\n",
    "y1=[-(w2[0]+w2[1]*i)/w2[2] for i in x1]\n",
    "\n",
    "plt.scatter(X,Y)\n",
    "plt.plot(x,y,'r')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 3.14 (Page 114)\n",
    "\n",
    "In a regression setting, assume the target function is linear, so $f(x) = x^Tw_f$ , and $y= Xw_f+\\epsilon$, where the entries in $\\epsilon$ are zero mean, iid with variance $\\sigma^2$ . In this problem derive the bias and variance as follows.\n",
    "\n",
    "(a) Show that the average function is $\\overline{g}(x) = f(x)$, no matter what the size of the data set, as long as $X^TX$ is invertible. What is the bias? \n",
    "\n",
    "(b) What is the variance? [Hint: Problem 3.11]   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "这里$\\overline{g}(x)$的定义要参考课本63页，对于这题来说，实际上就是求$E(w_f)$，回顾之前的结论可知$w_f=(X^TX)^{-1}X^Ty$。\n",
    "\n",
    "(a)注意$(X^TX)^{-1}$可逆，$\\epsilon$的数学期望为$0$\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E(w_f)&=E((X^TX)^{-1}X^Ty)\n",
    "\\\\&=E((X^TX)^{-1}X^T(Xw_f+\\epsilon))\n",
    "\\\\&=E((X^TX)^{-1}X^TXw_f)+(X^TX)^{-1}X^TE(\\epsilon)\n",
    "\\\\&=w_f\n",
    "\\end{aligned}\n",
    "$$\n",
    "所以$\\overline{g}(x) = x^Tw_f=f(x)$\n",
    "$$\n",
    "bias(x)=(\\overline{g}(x) - f(x))^2=0\\\\\n",
    "bias=0\n",
    "$$\n",
    "(b)\n",
    "$$\n",
    "\\begin{aligned}\n",
    "var(w_f)&=E_X||x^Tw_f^{'}-x^Tw_f||^2\n",
    "\\\\&=E_X||x^T(X^TX)^{-1}X^Ty-x^Tw_f||^2\n",
    "\\\\&=E_X||x^T(X^TX)^{-1}X^T(Xw_f+\\epsilon)-x^Tw_f||^2\n",
    "\\\\&=E_X||x^T(X^TX)^{-1}X^T\\epsilon||^2\n",
    "\\\\&=E_Xtrace(\\epsilon^TX(X^TX)^{-1}xx^T(X^TX)^{-1}X^T\\epsilon)\n",
    "\\\\&=E[trace(xx^T(X^TX)^{-1}X^T\\epsilon\\epsilon^TX(X^TX)^{-1})](trace(AB)=trace(BA))\n",
    "\\\\&=trace(E(xx^T(X^TX)^{-1}X^T\\epsilon\\epsilon^TX(X^TX)^{-1}))\n",
    "\\\\&=trace(E(xx^T)(X^TX)^{-1}X^T\\epsilon\\epsilon^TX(X^TX)^{-1})\n",
    "\\\\&=trace(\\sum (X^TX)^{-1}X^T\\epsilon\\epsilon^TX(X^TX)^{-1})(\\sum = E_x[xx^T])\n",
    "\\end{aligned}\n",
    "$$\n",
    "可以看到，和Problem3.11非常类似"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 3.15 (Page 114)\n",
    "\n",
    "In the text we derived that the linear regression solution weights must satisfy $X^TXw = X^Ty$. If $X^TX$ is not invertible, the solution $w_{lin}=(X^TX)^{-1}X^Ty$ won 't work. In this event, there will be many solutions for w that minimize $E_{in}$. Here, you will derive one such solution. Let $\\rho$ be the rank of $X$. Assume that the singular value decomposition (SVD) of $X$ is $X = U\\Gamma V^T$ where $U\\in R^{N \\times\\rho} $ satisfies $U^TU = I_{\\rho}$. $V\\in R^{(d+1) \\times\\rho} $ satisfies $V^TV = I_{\\rho}$. and $\\Gamma \\in R^{\\rho \\times \\rho}$ is a positive diagonal matrix.    \n",
    "\n",
    "(a) Show that $\\rho < d + 1$. \n",
    "\n",
    "(b) Show that $w_{lin} = V\\Gamma ^{-1}U^Ty$ satisfies $X^TXw_{lin} = X^Ty$, and hence is a solution. \n",
    "\n",
    "(c) Show that for any other solution that satisfies $X^TXw = X^Ty, ||w_{l i n} || < ||w||$ · That is, the solution we have constructed is the minimum norm set of weights that minimizes $E_{in}$·  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)由题设我们知道$X^TX$不可逆，此外$X^TX\\in R^{(d+1)\\times(d+1)}$，所以\n",
    "$$\n",
    "r(X^TX)< d+1\n",
    "$$\n",
    "注意线性代数中的恒等式$r(X)=r(X^TX)$，因此\n",
    "$$\n",
    "\\rho=r(X)=r(X^TX)<d+1\n",
    "$$\n",
    "(b)注意$\\Gamma$为对角阵，所以$\\Gamma^T=\\Gamma$\n",
    "$$\n",
    "\\begin{aligned}\n",
    "X^TXw_{lin} &= V\\Gamma^T U^T U\\Gamma V^TV\\Gamma ^{-1}U^Ty\n",
    "\\\\&=V\\Gamma U^Ty\n",
    "\\\\&=X^Ty\n",
    "\\end{aligned}\n",
    "$$\n",
    "(c)先对$X^TXw = X^Ty$进行处理，将$X = U\\Gamma V^T$带入\n",
    "$$\n",
    "X^TXw=V\\Gamma^T U^T U\\Gamma V^Tw=V\\Gamma^2V^Tw\n",
    "\\\\X^Ty=V\\Gamma^T U^T y=V\\Gamma U^T y\n",
    "\\\\从而\n",
    "\\\\V\\Gamma^2V^Tw=V\\Gamma U^T y\n",
    "\\\\两边同乘V^T，V^TV = I_{\\rho}，注意\\Gamma为正定阵，从而可逆，所以\n",
    "\\\\V^TV\\Gamma^2V^Tw=V^TV\\Gamma U^T y\n",
    "\\\\\\Gamma^2V^Tw=\\Gamma U^T y\n",
    "\\\\V^Tw=\\Gamma^{-1}U^T y\n",
    "$$\n",
    "接着我们将$w$，分解为两项\n",
    "$$\n",
    "w=w-w_{lin}+w_{lin}\n",
    "$$\n",
    "下面证明$w_{lin}^T(w-w_{lin})=0$\n",
    "$$\n",
    "\\begin{aligned}\n",
    "w_{lin}^T(w-w_{lin})&=(V\\Gamma ^{-1}U^Ty)^T(w-w_{lin})\n",
    "\\\\&=y^TU\\Gamma^{-1}(V^Tw-V^Tw_{lin})\n",
    "\\end{aligned}\n",
    "$$\n",
    "由我们刚刚推出的等式可知，对于每个满足$X^TXw = X^Ty$的$w$均满足如下等式\n",
    "$$\n",
    "V^Tw=\\Gamma^{-1}U^T y\n",
    "$$\n",
    "所以\n",
    "$$\n",
    "w_{lin}^T(w-w_{lin})=y^TU\\Gamma^{-1}(V^Tw-V^Tw_{lin})=y^TU\\Gamma^{-1}(\\Gamma^{-1}U^T y-\\Gamma^{-1}U^T y)=0\n",
    "$$\n",
    "因此\n",
    "$$\n",
    "\\begin{aligned}\n",
    "||w||^2&=||w-w_{lin}+w_{lin}||^2\n",
    "\\\\&=||w-w_{lin}||^2+||w_{lin}||^2+2w_{lin}^T(w-w_{lin})\n",
    "\\\\&=||w-w_{lin}||^2+||w_{lin}||^2\n",
    "\\\\&\\ge||w_{lin}||^2\n",
    "\\\\&当且仅当w=w_{lin}时等号成立\n",
    "\\end{aligned}\n",
    "$$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 3.16 (Page 115)\n",
    "\n",
    "In Example 3.4, it is mentioned that the output of the final hypothesis $g(x)$ learned using logistic regression can be thresholded to get a ' hard ' ($±1$) classification. This problem shows how to use the risk matrix introduced in Example 1 . 1 to obtain such a threshold . \n",
    "\n",
    "Consider fingerprint verification, as in Example 1.1. After learning from the data using logistic regression, you produce the final hypothesis \n",
    "$$\n",
    "g(x) = P[y = +1 | x]\n",
    "$$\n",
    " which is your estimate of the probability that $y = +1$. Suppose that the cost matrix is given by    \n",
    "\n",
    "![](https://github.com/Doraemonzzz/Learning-from-data/blob/master/photo/Chapter3/Problem3.16.png?raw=true)\n",
    "\n",
    "For a new person with fingerprint $x$, you compute $g(x)$ and you now need to decide whether to accept or reject the person (i.e., you need a hard classification ) . So, you will accept if $g(x) \\ge \\kappa$ , where $\\kappa$ is the threshold.    \n",
    "\n",
    "(a) Define the cost(accept) as your expected cost if you accept the person. Similarly define cost(reject) . Show that    \n",
    "$$\n",
    "cost(accept)=(1 - g(x))c_a\n",
    "\\\\cost( reject)=g(x)c_r\n",
    "$$\n",
    "(b) Use part (a) to derive a condition on $g(x)$ for accepting the person and hence show that \n",
    "$$\n",
    "\\kappa=\\frac{c_a}{c_a+c_r}\n",
    "$$\n",
    "(c) Use the cost matrices for the Supermarket and CIA a pplications in Example 1.1 to compute the threshold $\\kappa$ for each of these two cases. Give some intuition for the thresholds you get.        "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)如果accept，那么\n",
    "$$\n",
    "cost(accept)=P[y = +1 | x]\\times 0+P[y = -1 | x]\\times c_a=(1-g(x))c_a\n",
    "$$\n",
    "如果reject，那么\n",
    "$$\n",
    "cost( reject)=P[y = +1 | x]\\times c_r+P[y = -1 | x]\\times0=g(x)c_r\n",
    "$$\n",
    "(b)令只有当$cost(accept)\\le cost(reject)$时才应该接受，解这个不等式可得\n",
    "$$\n",
    "(1 - g(x))c_a\\le g(x)c_r\n",
    "\\\\ c_a\\le g(x)(c_a+c_r)\n",
    "\\\\ \\frac{c_a}{c_a+c_r}\\le g(x)\n",
    "$$\n",
    "所以当$\\frac{c_a}{c_a+c_r}\\le g(x)$时接受，$\\frac{c_a}{c_a+c_r}> g(x)$时拒绝，对照题目可知\n",
    "$$\n",
    "\\kappa=\\frac{c_a}{c_a+c_r}\n",
    "$$\n",
    "(c)回顾课本上有关超市和CIA的图\n",
    "\n",
    "![](https://github.com/Doraemonzzz/Learning-from-data/blob/master/photo/Chapter3/Problem3.16_2.png?raw=true)\n",
    "\n",
    "那么对于超市，$\\kappa=\\frac{1}{1+10}=\\frac{1}{11}$，对于CIA，$\\kappa=\\frac{1000}{1000+1}=\\frac{1000}{1001}$，所以只有当$g(x)$很大时才能被CIA接受，符合之前的讨论。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 3.17 (Page 115)\n",
    "\n",
    "Consider a function \n",
    "$$\n",
    "E(u, v) = e^u + e^{2v} + e^{uv} + u^2 - 3uv + 4v^2 - 3u - 5v\n",
    "$$\n",
    "(a) Approximate $E(u + \\Delta u, v +  \\Delta v)$ by $\\hat E_1(\\Delta u, \\Delta v)$, where $\\hat E_1$ is the first-order Taylor's expansion of $E$ around $(u, v) = (0, 0) $. Suppose $\\hat E_1(\\Delta u, \\Delta v)= a_u\\Delta u + a_v\\Delta v + a$. What are the values of $a_u , a_v $, and $a$?    \n",
    "\n",
    "(b) Minimize $\\hat E_1$ over all possible $(\\Delta u, \\Delta v)$ such that $\\|(\\Delta u, \\Delta v)\\| = 0.5$. In this chapter, we proved that the optimal column vector $\\left[\\begin{matrix} \\Delta u\\\\ \\Delta v\\end{matrix}\\right] $ is parallel to the column vector $-\\nabla E(u, v)$, which is called the negative gradient direction. Compute the optimal $(\\Delta u, \\Delta v)$ and the resulting $E(u + \\Delta u, v +  \\Delta v)$ . \n",
    "\n",
    "(c) Approximate $E(u + \\Delta u, v +  \\Delta v)$ by $\\hat E_2(\\Delta u, \\Delta v)$, where $E_2$ is the second order Taylor's expansion of $E$ around $(u, v) = (0, 0)$ . Suppose \n",
    "$$\n",
    "\\hat E_2(\\Delta u, \\Delta v)=b_{uu}(\\Delta u)^2+b_{vv}(\\Delta v)^2+b_{uv}(\\Delta u)(\\Delta v)+b_u\\Delta u + b_v\\Delta v + b\n",
    "$$\n",
    "What are the values of $b_{uu} , b_{vv} , b_{uv} , b_{u} , b_{v}$, and $b$?\n",
    "\n",
    "(d) Minimize $\\hat E_2$ over all possible $(\\Delta u, \\Delta v)$ (regardless of length) . Use the fact that $ \\nabla^2 E(u, v)|_{(0,0)}$(the Hessian matrix at $(0, 0)$) is positive definite to prove that the optimal column vector\n",
    "$$\n",
    "\\left[\\begin{matrix} \n",
    "\\Delta u^*\n",
    "\\\\ \\Delta v^*\n",
    "\\end{matrix}\\right] \n",
    "=- (\\nabla^2 E(u, v))^{-1}\\nabla E(u, v)\n",
    "$$\n",
    "which is called the Newton direction. \n",
    "\n",
    "(e) Numerically compute the following values: \n",
    "\n",
    "​\t(i) the vector $(\\Delta u, \\Delta v)$ of length $0.5$ along the Newton direction, and the resulting $E(u + \\Delta u, v +  \\Delta v)$. \n",
    "\n",
    "​\t(ii) the vector $(\\Delta u, \\Delta v)$ of length $0.5$ that minimizes $E(u + \\Delta u, v +  \\Delta v)$ , and the resulting $E(u + \\Delta u, v +  \\Delta v)$. ( Hint: Let $\\Delta u = 0.5 sin \\theta$.) \n",
    "\n",
    "​\tCompare the val ues of $E(u + \\Delta u, v +  \\Delta v)$ in (b) , (e i) , and (e ii) . Briefly state your findings. \n",
    "\n",
    "The negative gradient direction and the Newton direction are quite fundamental for designing optimization algorithms. It is important to understand these directions and put them in your toolbox for designing learning algorithms.    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)进行一阶泰勒展开，由公式可知\n",
    "$$\n",
    "a_u=\\frac{\\partial E(u,v)}{\\partial u}|_{(u,v)=(0,0)}=e^u+ve^{uv}+2u-3v-3 |_{(u,v)=(0,0)}=-2\n",
    "\\\\ a_v=\\frac{\\partial E(u,v)}{\\partial v}|_{(u,v)=(0,0)}=2e^v+ue^{uv}-3u+8v-5|_{(u,v)=(0,0)}=-3\n",
    "\\\\ a=E(v,v)|_{(u,v)=(0,0)}=3\n",
    "$$\n",
    "\n",
    "(b)和负梯度同向时$\\hat E_1$最小，那么\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\left[\\begin{matrix} \n",
    "\\Delta u\n",
    "\\\\ \\Delta v\n",
    "\\end{matrix}\\right] \n",
    "&=-k\\nabla E(u, v)|_{(u,v)=(0,0)}\n",
    "\\\\&=-k\\left[\\begin{matrix} \n",
    "\\frac{\\partial E(u,v)}{\\partial u}|_{(u,v)=(0,0)}\n",
    "\\\\\n",
    "\\frac{\\partial E(u,v)}{\\partial v}|_{(u,v)=(0,0)}\n",
    "\\end{matrix}\\right]\n",
    "\\\\&=-k\n",
    "\\left[\\begin{matrix} \n",
    "-2\n",
    "\\\\ -3\n",
    "\\end{matrix}\\right] \n",
    "\\\\&=k \n",
    "\\left[\\begin{matrix} \n",
    "2\n",
    "\\\\ 3\n",
    "\\end{matrix}\\right] (k>0)\n",
    "\\end{aligned}\n",
    "$$\n",
    "因为$\\|(\\Delta u, \\Delta v)\\| = 0.5$，所以$ \\Delta u=\\frac 2 {\\sqrt{13}} \\times 0.5, \\Delta v=\\frac 3 {\\sqrt{13}} \\times 0.5$，$E(u + \\Delta u, v +  \\Delta v)=E(\\frac 1 {\\sqrt{13}},\\frac 3 {2\\sqrt{13}} )=2.25085973499$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.25085973499\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "def E(u,v):\n",
    "    return np.exp(u)+np.exp(2*v)+np.exp(u*v)+u*u-3*u*v+4*v*v-3*u-5*v\n",
    "\n",
    "u=1/np.sqrt(13)\n",
    "v=3/(2*np.sqrt(13))\n",
    "print(E(u,v))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "(c)二阶泰勒公式\n",
    "$$\n",
    "b_{uu} =\\frac 1 2\\frac{\\partial^2 E(u,v)}{\\partial u^2}|_{(u,v)=(0,0)}=\\frac 1 2\\frac{\\partial}{\\partial u}\\frac{\\partial E(u,v)}{\\partial u}|_{(u,v)=(0,0)}=\\frac 3 2\n",
    "\\\\b_{vv}=\\frac 1 2\\frac{\\partial^2 E(u,v)}{\\partial v^2}|_{(u,v)=(0,0)}=\\frac 1 2\\frac{\\partial}{\\partial v}\\frac{\\partial E(u,v)}{\\partial v}|_{(u,v)=(0,0)}=5\n",
    "\\\\ b_{uv}=\\frac 1 2\\frac{\\partial^2 E(u,v)}{\\partial u \\partial v}|_{(u,v)=(0,0)}=\\frac 1 2\\frac{\\partial}{\\partial v}\\frac{\\partial E(u,v)}{\\partial u}|_{(u,v)=(0,0)}=-1\n",
    "\\\\b_{u} =a_{u}=-2\n",
    "\\\\b_{v}=a_{v}=-3\n",
    "\\\\b=a=3\n",
    "$$\n",
    "(d)先判断正定性\n",
    "$$\n",
    "\\nabla^2 E(u, v)=\n",
    "\\left[\n",
    " \\begin{matrix}\n",
    " \\frac{\\partial^2 E(u,v)}{\\partial u^2} &   \\frac{\\partial^2 E(u,v)}{\\partial u \\partial v}  \\\\\n",
    "   \\frac{\\partial^2 E(u,v)}{\\partial u \\partial v} &  \\frac{\\partial^2 E(u,v)}{\\partial v^2}\n",
    "  \\end{matrix}\n",
    "  \\right] =\n",
    "  \\left[\n",
    " \\begin{matrix}\n",
    "3 &   -2  \\\\\n",
    "    -2  &   10 \n",
    "  \\end{matrix}\n",
    "  \\right]\n",
    "$$\n",
    "显然$\\nabla^2 E(u, v)$正定，接着带入牛顿公式求解\n",
    "$$\n",
    "\\left[\\begin{matrix} \n",
    "\\Delta u^*\n",
    "\\\\ \\Delta v^*\n",
    "\\end{matrix}\\right] \n",
    "=- (\\nabla^2 E(u, v))^{-1}\\nabla E(u, v)\n",
    "=-\\left[\n",
    " \\begin{matrix}\n",
    "  b_{uu} &   b_{uv}  \\\\\n",
    "    b_{uv}  &   b_{vv}  \n",
    "  \\end{matrix}\n",
    "  \\right] ^{-1}\n",
    "  \\left[\\begin{matrix} \n",
    "\\frac{\\partial E(u,v)}{\\partial u}\n",
    "\\\\\n",
    "\\frac{\\partial E(u,v)}{\\partial v}\n",
    "\\end{matrix}\\right]|_{(u,v)=(0,0)}\n",
    "=-\\left[\n",
    " \\begin{matrix}\n",
    "3 &   -2  \\\\\n",
    "    -2  &   10 \n",
    "  \\end{matrix}\n",
    "  \\right] ^{-1}\n",
    "    \\left[\\begin{matrix} \n",
    "    -2\\\\-3\n",
    "\\end{matrix}\\right]\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "带入公式求解，$\\Delta u=0.4472136,\\Delta v=0.2236068,E(u + \\Delta u, v +  \\Delta v)=1.87339277$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 1.87339277]\n",
      "[[ 0.4472136]\n",
      " [ 0.2236068]]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from numpy.linalg import inv\n",
    "\n",
    "m1=np.array([[3,-2],[-2,10]])\n",
    "m2=np.array([[2],[3]])\n",
    "d=inv(m1).dot(m2)\n",
    "\n",
    "l=np.sqrt((d*d).sum())\n",
    "d1=0.5*d/l\n",
    "\n",
    "u=d1[0]\n",
    "v=d1[1]\n",
    "\n",
    "print(E(u,v))\n",
    "print(d1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(e)将之前计算出来的系数带入$\\hat E_2(\\Delta u, \\Delta v)=b_{uu}(\\Delta u)^2+b_{vv}(\\Delta v)^2+b_{uv}(\\Delta u)(\\Delta v)+b_u\\Delta u + b_v\\Delta v + b$，令$\\Delta u =t,\\Delta v=s$\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\hat E_2(\\Delta u, \\Delta v)&=b_{uu}(\\Delta u)^2+b_{vv}(\\Delta v)^2+b_{uv}(\\Delta u)(\\Delta v)+b_u\\Delta u + b_v\\Delta v + b\n",
    "\\\\&=1.5 (t^2)+5(s^2)-2st-2t-3s-2\n",
    "\\\\&=1.5(t-a)^2+5(s-b)^2-2(t-a)(s-b)+C\n",
    "\\end{aligned}\n",
    "$$\n",
    "其中$a,b,C$均为常数，后续会求解出来，令$t_1=t-a,s_1=s-b$\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\hat E_2(\\Delta u, \\Delta v)&=1.5(t-a)^2+5(s-b)^2-2(t-a)(s-b)+C\n",
    "\\\\&=1.5t^2_1+5s^2_1-2t_1s_1+C\n",
    "\\\\&=\\frac 3 2(t_1-\\frac 2 3 s_1)^2+(5-\\frac 2 3 )s_1^2+C\n",
    "\\end{aligned}\n",
    "$$\n",
    "题目中要使得$E_2(u, v)=E_2(0,0)+\\hat E_2(\\Delta u, \\Delta v)$最小，所以求$\\hat E_2(\\Delta u, \\Delta v)$的最小值即可。\n",
    "\n",
    "由上式，当$s_1=0,t_1-\\frac 2 3 s_1=0$时，即$s_1=t_1=0$时$\\hat E_2(\\Delta u, \\Delta v)$最小，注意$t_1,s_1$的定义可得此时\n",
    "$$\n",
    "t=a,s=b\n",
    "$$\n",
    "而$\\Delta u =t,\\Delta v=s$，所以等号成立的条件为\n",
    "$$\n",
    "\\Delta u =a,\\Delta v=b\n",
    "$$\n",
    "接下来求解$a,b$\n",
    "$$\n",
    "\\begin{aligned}\n",
    "1.5(t-a)^2+5(s-b)^2-2(t-a)(s-b)+C&=1.5(t^2-2at+a^2)+5(s^2-2sb+b^2)-2(ts-as-bt+ab)+C\n",
    "\\\\&=1.5t^2+5s^2-2st-(3a-2b)t-(10b-2a)s+1.5a^2+5b^2-2ab+C\n",
    "\\\\&=1.5 t^2+5s^2-2st-2t-3s-2\n",
    "\\end{aligned}\n",
    "$$\n",
    "那么\n",
    "$$\n",
    "\\begin{cases}\n",
    "3a-2b=2\n",
    "\\\\-2a+10b=3\n",
    "\\end{cases}\n",
    "\\\\\n",
    "\\left[\n",
    " \\begin{matrix}\n",
    "3 &   -2  \\\\\n",
    "    -2  &   10 \n",
    "  \\end{matrix}\n",
    "  \\right]\n",
    "      \\left[\\begin{matrix} \n",
    "    a\\\\b\n",
    "\\end{matrix}\\right]\n",
    "=\n",
    "    \\left[\\begin{matrix} \n",
    "    2\\\\3\n",
    "\\end{matrix}\\right]\n",
    "\\\\     \n",
    "\\left[\\begin{matrix} \n",
    "    \\Delta u\\\\ \\Delta v\n",
    "\\end{matrix}\\right]=\n",
    "\\left[\\begin{matrix} \n",
    "    a\\\\b\n",
    "\\end{matrix}\\right]\n",
    "=\\left[\n",
    " \\begin{matrix}\n",
    "3 &   -2  \\\\\n",
    "    -2  &   10 \n",
    "  \\end{matrix}\n",
    "  \\right] ^{-1}\n",
    "    \\left[\\begin{matrix} \n",
    "    2\\\\3\n",
    "\\end{matrix}\\right]\n",
    "$$\n",
    "所以这种方法可以得出牛顿方法同样的解，这也验证了牛顿方法的正确性，计算结果同(d)。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 3.18 (Page 116)\n",
    "\n",
    "Take the feature transfrm $\\phi_2$ in Equation (3.13) as $\\phi$. \n",
    "\n",
    "(a) Show that $d_{vc} (\\mathcal{H}_{\\phi}) \\le 6$ \n",
    "\n",
    "(b) Show that $d_{vc} (\\mathcal{H}_{\\phi}) >4$. [Hint: Exercise 3.12]\n",
    "\n",
    "(c) Give an u pper bound on $d_{vc} (\\mathcal{H}_{\\phi_k}) $  for $\\mathcal {X} = R^d$. \n",
    "\n",
    "(d) Define \n",
    "$$\n",
    "\\tilde{\\phi_2}:x\\to(1,x_1,x_2,x_1+x_2,x_1-x_2,x_1^2,x_1x_2,x_2x_1,x_2^2)\\ for\\ x\\in R^2\n",
    "$$\n",
    "Argue that $d_{vc} (\\mathcal{H}_{\\tilde{\\phi_2} }) = d_{vc} (\\mathcal{H}_{{\\phi_2} }) $. In other words, while $\\tilde{\\phi_2}(\\mathcal X)\\in R^9$ , $d_{vc} (\\mathcal{H}_{\\tilde{\\phi_2} })\\le 6 < 9$. Thus, the dimension of $\\phi(\\mathcal{X})$ only gives an upper bound of $d_{vc} (\\mathcal{H}_{\\phi})$ , and the exact value of $d_{vc} (\\mathcal{H}_{\\phi})$ can depend on the components of the transform. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "回顾103页的$\\phi_2$\n",
    "$$\n",
    "\\phi_2(x)=(1,x_1,x_2,x_1^2,x_1x_2,x_2^2)\n",
    "$$\n",
    "(a)可以将$\\phi_2(x)\\in R^5 $看成$R^5$上的感知机，所以  \n",
    "$$\n",
    "d_{vc} (\\mathcal{H}_{\\phi_2}) \\le6\n",
    "$$\n",
    "(b)对于每种分类，实际上我们是在求\n",
    "$$\n",
    "sign(w^Tx^i)=y^i(i=1,2...N)\n",
    "$$\n",
    "其中$(x^1,...,x^N)$为输入数据，$(y^1,...,y^N)$为对应的分类($y^i\\in\\{1,-1\\}$)，对于此题，我们取$N=5$，且求解一个更强的条件\n",
    "$$\n",
    "w^Tx^i=y^i(i=1,2...5)\n",
    "$$\n",
    "结合$\\phi_2(x)=(1,x_1,x_2,x_1^2,x_1x_2,x_2^2)$可得\n",
    "$$\n",
    "w_0+w_1x_1^i+w_2x_2^i+w_3(x_1^i)^2+w_4x_1^ix_2^i+w_5(x_2^i)^2=y^i(i=1,2...5)\n",
    "$$\n",
    "这是关于$w_j(j=0,1,...5)$的六元一次方程组，且方程组有五个，所以必然有解。从而对于5个点，任意一种分类均可以表示出来，所以\n",
    "$$\n",
    "d_{vc} (\\mathcal{H}_{\\phi})\\ge5 >4\n",
    "$$\n",
    "(c)可以将$d_{vc}\\in R^d$看成$R^d$上的感知机，所以\n",
    "$$\n",
    "d_{vc} (\\mathcal{H}_{\\phi_k}) \\le d+1\n",
    "$$\n",
    "(d)我们每一种分类实际上对应了一个$w$，使得\n",
    "$$\n",
    "sign(w^Tx^i)=y^i(i=1,2...N)\n",
    "$$\n",
    "其中$(x^1,...,x^N)$为输入数据，$(y^1,...,y^N)$为对应的分类。所以如果我们能证明$\\phi_2$对应的$w$与$\\tilde{\\phi_2}$对应的$\\tilde w$可以形成一一对应关系，那么即可证明结论，因为两种特征转化下的分类可以一一对应。\n",
    "\n",
    "先证明$\\phi_2$对应的$w$与$\\tilde{\\phi_2}$对应的$\\tilde w$可以形成一一对应关系\n",
    "$$\n",
    "\\begin{aligned}\n",
    "w^T\\phi_2&=w_0+w_1x_1+w_2x_2+w_3(x_1+x_2)+w_4(x_1-x_2)+w_5(x_1^2)+w_6(x_1x_2)+w_7(x_2x_1)+w_8(x_2^2)\n",
    "\\\\&=w_0+(w_1+w_3+w_4)x_1+(w_2+w_3-w_4)x_2+w_5(x_1^2)+(w_6+w_7)(x_1x_2)+w_8(x_2^2)\n",
    "\\\\&=0\n",
    "\\end{aligned}\n",
    "$$\n",
    "那么$w$可以对应为$\\tilde w=(w_0,w_1+w_3+w_4,w_2+w_3-w_4,w_5,w_6+w_7,w_8)$\n",
    "\n",
    "接着证明$\\tilde{\\phi_2}$对应的$\\tilde w$与$\\phi_2$对应的$w$可以形成一一对应关系\n",
    "$$\n",
    "\\begin{aligned}\n",
    "{\\tilde w}^T{\\tilde\\phi_2}&=\\tilde w_0+\\tilde w_1x_1+\\tilde w_2x_2+\\tilde w_3(x_1^2)+\\tilde w_4(x_1x_2)+\\tilde w_5(x_2^2)\n",
    "\\\\&=\\tilde w_0+\\tilde w_1x_1+\\tilde w_2x_2+0(x_1+x_2)+0(x_1-x_2)+\\tilde w_3(x_1^2)+\\tilde w_4(x_1x_2)+0(x_2x_1)+\\tilde w_5(x_2^2)\n",
    "\\\\&=0\n",
    "\\end{aligned}\n",
    "$$\n",
    "所以$\\tilde w$可以对应为$w=(\\tilde w_0,\\tilde w_1,\\tilde w_2,0,0,\\tilde w_3,\\tilde w_4,0,\\tilde w_5)$。\n",
    "\n",
    "因此两种特征变化可以一一对应，那么\n",
    "$$\n",
    "d_{vc} (\\mathcal{H}_{\\tilde{\\phi_2} }) = d_{vc} (\\mathcal{H}_{{\\phi_2} }) \\le 6 < 9\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 3.19 (Page 117)\n",
    "\n",
    "A Transformer thinks the following procedures would work well in learning from two-dimensional data sets of any size. Please point out if there are any potential problems in the procedures: \n",
    "\n",
    "(a) Use the feature transform \n",
    "$$\n",
    "\\phi(x)=\\begin{cases}\n",
    "(\\underbrace{0,...,0}_{n-1},1,0,...) & \\text{if $ x=x_n $}\\\\\n",
    "(0,...,0) & \\text{otherwise }\n",
    "\\end{cases}\n",
    "$$\n",
    "before running PLA. \n",
    "\n",
    "(b) Use the feature transform $\\phi$ with \n",
    "$$\n",
    "\\phi_n(x)=exp(-\\frac{\\|x-x_n\\|^2}{2\\gamma^2})\n",
    "$$\n",
    "using some very small $\\gamma$· \n",
    "\n",
    "(c) Use the feature transform $\\phi$ that consists of all \n",
    "$$\n",
    "\\phi_{i,j}(x)=exp(-\\frac{\\|x-(i,j)\\|^2}{2\\gamma^2})\n",
    "$$\n",
    "before running PLA, with $i \\in \\{0,\\frac {1}{100}, . . . , 1\\}$ and $j \\in \\{0,\\frac {1}{100}, . . . , 1\\}$.    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这题有点没有完全理解透，所以仅供参考。\n",
    "\n",
    "(a)这题和台大的作业3第12题很像，我们来看三个点$x_1,x_2,x_3$的情形\n",
    "$$\n",
    "\\phi(x_1)=(1,0,0)\\\\\n",
    "\\phi(x_2)=(0,1,0)\\\\\n",
    "\\phi(x_3)=(0,0,1)\n",
    "$$\n",
    "可以看到这里将3个点映射到了$R^3$，同理可知$N$个点可以映射到$R^N$，$R^N$的感知机$d_{vc}=N+1$，所以$N$个点一定能被shatter，从而这种特征转换是好的。\n",
    "\n",
    "(b)(c)\n",
    "\n",
    "(c)实际上是(b)的特殊情形，这两种变换的效果都很好，这里可以参考林老师的课件理解\n",
    "\n",
    "![](https://github.com/Doraemonzzz/Learning-from-data/blob/master/photo/Chapter3/Problem3.19.png?raw=true)\n",
    "\n",
    "可以简单地理解为(b)(c)是一个无限维的特征转换，所以分类效果会很好。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
